ComposioHQ / composio

Composio equip's your AI agents & LLMs with 100+ high-quality integrations via function calling
https://docs.composio.dev
Other
7.48k stars 2.33k forks source link

fix: use getEnvVariable function to get variables for cloudflare #342

Closed utkarsh-dixit closed 1 month ago

utkarsh-dixit commented 1 month ago

PR Type

Bug fix, Enhancement


Description


Changes walkthrough ๐Ÿ“

Relevant files
Enhancement
base.toolset.ts
Use getEnvVariable for environment variable access in base.toolset.ts

js/src/sdk/base.toolset.ts
  • Imported getEnvVariable function.
  • Replaced direct environment variable access with getEnvVariable.
  • +3/-2     
    index.ts
    Use `getEnvVariable` for environment variable access in `index.ts`

    js/src/sdk/index.ts
  • Imported getEnvVariable function.
  • Replaced direct environment variable access with getEnvVariable.
  • +2/-1     
    shared.ts
    Add `getEnvVariable` function for safe environment variable access

    js/src/utils/shared.ts
  • Added getEnvVariable function to safely access environment variables.
  • +7/-1     

    ๐Ÿ’ก PR-Agent usage: Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    ellipsis-dev[bot] commented 1 month ago

    Your free trial has expired. To keep using Ellipsis, sign up at https://app.ellipsis.dev for $20/seat/month or reach us at help@ellipsis.dev

    codiumai-pr-agent-pro[bot] commented 1 month ago

    PR Reviewer Guide ๐Ÿ”

    โฑ๏ธ Estimated effort to review: 2 ๐Ÿ”ต๐Ÿ”ตโšชโšชโšช
    ๐Ÿงช No relevant tests
    ๐Ÿ”’ No security concerns identified
    โšก Key issues to review

    Error Handling
    The function `getEnvVariable` uses a try-catch block, but the catch block might not be necessary since accessing `process.env[name]` should not throw an error under normal circumstances. Consider removing the try-catch block to simplify the function unless there's a specific error scenario that needs handling.
    codiumai-pr-agent-pro[bot] commented 1 month ago

    PR Code Suggestions โœจ

    CategorySuggestion                                                                                                                                    Score
    Possible bug
    Add optional chaining to prevent potential runtime errors when accessing properties on possibly null objects ___ **Consider handling the scenario where UserData.load(getUserPath()) returns null or
    undefined, which could cause a runtime error when trying to access the apiKey
    property. You can use optional chaining (?.) to safely access properties on
    potentially null or undefined objects.** [js/src/sdk/base.toolset.ts [44]](https://github.com/ComposioHQ/composio/pull/342/files#diff-7cffb55d48541e655450d0ef611692c56b7fd85801463ea3389e07443c993530R44-R44) ```diff -const clientApiKey: string | undefined = apiKey || getEnvVariable("COMPOSIO_API_KEY") || UserData.load(getUserPath()).apiKey; +const clientApiKey: string | undefined = apiKey || getEnvVariable("COMPOSIO_API_KEY") || UserData.load(getUserPath())?.apiKey; ``` - [ ] **Apply this suggestion**
    Suggestion importance[1-10]: 9 Why: This suggestion addresses a potential runtime error by using optional chaining, which is a good practice to prevent crashes due to accessing properties on null or undefined objects.
    9
    Enhancement
    Add error handling around environment variable retrieval to ensure robust path construction ___ **It's recommended to handle exceptions that might be thrown by getEnvVariable when
    used within path.join. This ensures that the application can gracefully handle cases
    where environment variables are not set or are incorrectly configured.** [js/src/sdk/base.toolset.ts [26]](https://github.com/ComposioHQ/composio/pull/342/files#diff-7cffb55d48541e655450d0ef611692c56b7fd85801463ea3389e07443c993530R26-R26) ```diff -return path.join(getEnvVariable("HOME", ""), ".composio", "userData.json"); +try { + return path.join(getEnvVariable("HOME", ""), ".composio", "userData.json"); +} catch (error) { + console.error("Failed to construct path:", error); + return null; +} ``` - [ ] **Apply this suggestion**
    Suggestion importance[1-10]: 8 Why: Adding error handling around environment variable retrieval enhances the robustness of the code and ensures that the application can handle misconfigurations gracefully.
    8
    Ensure non-empty API key and provide a clear error message if missing ___ **To ensure that the apiKey is always a non-empty string, consider adding a more
    explicit check for an empty string and provide a clearer error message if the apiKey
    is not provided.** [js/src/sdk/index.ts [26]](https://github.com/ComposioHQ/composio/pull/342/files#diff-de82114af414fc4b45690c3f12d436b62d6270bd11e7b985bc37de196609651eR26-R26) ```diff -this.apiKey = apiKey || getEnvVariable("COMPOSIO_API_KEY") || ''; +this.apiKey = apiKey || getEnvVariable("COMPOSIO_API_KEY"); +if (!this.apiKey) { + throw new Error('API key is missing or empty'); +} ``` - [ ] **Apply this suggestion**
    Suggestion importance[1-10]: 8 Why: This suggestion improves error handling by ensuring that the `apiKey` is not only defined but also non-empty, which enhances the clarity and robustness of the code.
    8
    Best practice
    Log errors when accessing environment variables to aid in debugging ___ **To improve the robustness of the getEnvVariable function, consider logging the error
    before returning the default value. This will help in diagnosing issues related to
    environment variable access failures.** [js/src/utils/shared.ts [115-120]](https://github.com/ComposioHQ/composio/pull/342/files#diff-e2e64f9049d5189dc4ae675e5a0177fbced2366e7c6edb75ef12fffb9a1d6e3eR115-R120) ```diff try { return process.env[name] || defaultValue; } catch (e) { + console.error(`Error accessing environment variable ${name}:`, e); return defaultValue; } ``` - [ ] **Apply this suggestion**
    Suggestion importance[1-10]: 7 Why: Logging errors when accessing environment variables is a good practice for debugging and maintaining the application, though it is not critical for functionality.
    7
    codiumai-pr-agent-pro[bot] commented 1 month ago

    CI Failure Feedback ๐Ÿง

    (Checks updated until commit https://github.com/ComposioHQ/composio/commit/999c306a443658515e5ee3b9dc4dda223485ad9a)

    **Action:** test (ubuntu-latest, 3.9)
    **Failed stage:** [Unittests](https://github.com/ComposioHQ/composio/actions/runs/10007787339/job/27663263919) [โŒ]
    **Failed test name:** test_action_enum
    **Failure summary:** The action failed because the test test_action_enum failed. The test failed due to a ValueError
    being raised in the Action class's __init__ method. The specific error message was:
  • "Invalid value GITHUB_ISSUES_LIST for Action"
  • Relevant error logs: ```yaml 1: ##[group]Operating System 2: Ubuntu ... 506: * [new branch] fix/readme -> origin/fix/readme 507: * [new branch] fix/readme-logo -> origin/fix/readme-logo 508: * [new branch] fix/swe-agent -> origin/fix/swe-agent 509: * [new branch] ft-add-better-help-text -> origin/ft-add-better-help-text 510: * [new branch] ft-apps-id -> origin/ft-apps-id 511: * [new branch] ft-bring-back-core-sdk -> origin/ft-bring-back-core-sdk 512: * [new branch] ft-custom-base-url-js-sdk -> origin/ft-custom-base-url-js-sdk 513: * [new branch] ft-did-you-mean -> origin/ft-did-you-mean 514: * [new branch] ft-error-tracking -> origin/ft-error-tracking ... 929: tests/test_cli/test_actions.py::TestListActions::test_list_all[arguments3-exptected_outputs3-unexptected_outputs3] PASSED [ 17%] 930: tests/test_cli/test_actions.py::TestListActions::test_tag_not_found PASSED [ 19%] 931: tests/test_cli/test_actions.py::TestListActions::test_limit SKIPPED [ 21%] 932: tests/test_cli/test_actions.py::TestListActions::test_copy PASSED [ 23%] 933: tests/test_cli/test_add.py::TestComposioAdd::test_no_auth PASSED [ 25%] 934: tests/test_cli/test_apps.py::TestList::test_list PASSED [ 27%] 935: tests/test_cli/test_apps.py::TestUpdate::test_update_not_required PASSED [ 29%] 936: tests/test_cli/test_apps.py::TestUpdate::test_update SKIPPED (Needs 937: investigation, this test fails in CI) [ 31%] ... 945: tests/test_client/test_client.py::test_raise_invalid_api_key PASSED [ 48%] 946: tests/test_client/test_collections.py::TestTriggerNamesSerialization::test_converts_trigger_objects_to_comma_separated_string PASSED [ 51%] 947: tests/test_client/test_collections.py::TestTriggerNamesSerialization::test_converts_trigger_strings_to_comma_separated_string PASSED [ 53%] 948: tests/test_client/test_collections.py::TestTriggerNamesSerialization::test_converts_mix_of_trigger_objects_and_strings PASSED [ 55%] 949: tests/test_client/test_collections.py::test_trigger_subscription PASSED [ 57%] 950: tests/test_client/test_endpoints.py::test_endpoint PASSED [ 59%] 951: tests/test_client/test_enum.py::test_tag_enum PASSED [ 61%] 952: tests/test_client/test_enum.py::test_app_enum PASSED [ 63%] 953: tests/test_client/test_enum.py::test_action_enum FAILED [ 65%] ... 962: tests/test_tools/test_local/test_workspace.py::test_stderr PASSED [ 85%] 963: tests/test_tools/test_local/test_workspace.py::test_workspace PASSED [ 87%] 964: tests/test_utils/test_decorators.py::test_deprecated PASSED [ 89%] 965: tests/test_utils/test_git.py::test_get_git_user_info PASSED [ 91%] 966: tests/test_utils/test_shared.py::test_get_pydantic_signature_format_from_schema_params PASSED [ 93%] 967: tests/test_utils/test_shared.py::test_json_schema_to_pydantic_field PASSED [ 95%] 968: tests/test_utils/test_shared.py::test_json_schema_to_fields_dict PASSED [ 97%] 969: tests/test_utils/test_url.py::test_get_web_url PASSED [100%] 970: =================================== FAILURES =================================== ... 980: self = 981: value = 'GITHUB_ISSUES_LIST' 982: def __init__(self, value: t.Union[str, te.Self]) -> None: 983: """Create an Enum""" 984: if isinstance(value, _AnnotatedEnum): 985: value = value._slug 986: value = t.cast(str, value).upper() 987: if value not in self.__annotations__ and value not in _runtime_actions: 988: > raise ValueError(f"Invalid value `{value}` for `{self.__class__.__name__}`") 989: E ValueError: Invalid value `GITHUB_ISSUES_LIST` for `Action` 990: composio/client/enums/base.py:112: ValueError 991: =============================== warnings summary =============================== 992: composio/client/http.py:20 993: /home/runner/work/composio/composio/python/composio/client/http.py:20: DeprecationWarning: Inheritance class AsyncHttpClient from ClientSession is discouraged 994: class AsyncHttpClient(AsyncSession, logging.WithLogger): 995: .tox/unittests/lib/python3.9/site-packages/pydantic/_internal/_config.py:291 996: .tox/unittests/lib/python3.9/site-packages/pydantic/_internal/_config.py:291 997: /home/runner/work/composio/composio/python/.tox/unittests/lib/python3.9/site-packages/pydantic/_internal/_config.py:291: PydanticDeprecatedSince20: Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.8/migration/ ... 1187: composio/utils/shared.py 118 84 29% 44, 47-51, 54-58, 61-77, 83, 101-104, 153-158, 174-221, 247-293 1188: composio/utils/url.py 10 1 90% 35 1189: examples/crewai_ci_chart.py 14 14 0% 1-38 1190: -------------------------------------------------------------------------------------------------------------- 1191: TOTAL 9889 2259 77% 1192: Coverage HTML written to dir htmlcov 1193: Coverage XML written to file coverage.xml 1194: =========================== short test summary info ============================ 1195: FAILED tests/test_client/test_enum.py::test_action_enum - ValueError: Invalid value `GITHUB_ISSUES_LIST` for `Action` 1196: ============= 1 failed, 41 passed, 5 skipped, 3 warnings in 43.48s ============= 1197: unittests: exit 1 (44.64 seconds) /home/runner/work/composio/composio/python> pytest -vvv -rfE --doctest-modules composio/ tests/ --cov=composio --cov=examples --cov-report=html --cov-report=xml --cov-report=term --cov-report=term-missing --cov-config=.coveragerc pid=5620 1198: .pkg: _exit> python /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 1199: unittests: FAIL code 1 (91.13=setup[37.58]+cmd[8.90,44.64] seconds) 1200: evaluation failed :( (91.51 seconds) 1201: ##[error]Process completed with exit code 1. ```

    โœจ CI feedback usage guide:
    The CI feedback tool (`/checks)` automatically triggers when a PR has a failed check. The tool analyzes the failed checks and provides several feedbacks: - Failed stage - Failed test name - Failure summary - Relevant error logs In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR: ``` /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}" ``` where `{repo_name}` is the name of the repository, `{run_number}` is the run number of the failed check, and `{job_number}` is the job number of the failed check. #### Configuration options - `enable_auto_checks_feedback` - if set to true, the tool will automatically provide feedback when a check is failed. Default is true. - `excluded_checks_list` - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list. - `enable_help_text` - if set to true, the tool will provide a help message with the feedback. Default is true. - `persistent_comment` - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true. - `final_update_message` - if `persistent_comment` is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true. See more information about the `checks` tool in the [docs](https://pr-agent-docs.codium.ai/tools/ci_feedback/).