From 486bb03534b18fcc675f231f533ecd99a5489d30 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 5 Apr 2021 11:48:39 -0700 Subject: [PATCH] test: use constraints files to test lower bounds (#67) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * changes without context autosynth cannot find the source of changes triggered by earlier changes in this repository, or by version upgrades to tools such as linters. * build(node): lint system-test and test Co-authored-by: Jeffrey Rennie Source-Author: Benjamin E. Coe Source-Date: Thu Mar 4 15:23:16 2021 -0800 Source-Repo: googleapis/synthtool Source-Sha: 6056faa36b3ab941a56f71eab8164e78af998844 Source-Link: https://github.com/googleapis/synthtool/commit/6056faa36b3ab941a56f71eab8164e78af998844 * chore: add pre-commit-config to renovate ignore paths Disable renovate PRs on the .pre-commit-config.yaml which is templated from synthtool. https://docs.renovatebot.com/configuration-options/#ignorepaths Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Mon Mar 15 09:05:39 2021 -0600 Source-Repo: googleapis/synthtool Source-Sha: 2c54c473779ea731128cea61a3a6c975a08a5378 Source-Link: https://github.com/googleapis/synthtool/commit/2c54c473779ea731128cea61a3a6c975a08a5378 * build(python): fail nox sessions if a python version is missing Nox's default behavior is to quietly skip if a python interpreter is missing. https://nox.thea.codes/en/stable/usage.html#failing-sessions-when-the-interpreter-is-missing Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Tue Mar 16 13:38:02 2021 -0600 Source-Repo: googleapis/synthtool Source-Sha: eda422b90c3dde4a872a13e6b78a8f802c40d0db Source-Link: https://github.com/googleapis/synthtool/commit/eda422b90c3dde4a872a13e6b78a8f802c40d0db * chore(python): add kokoro configs for periodic builds against head This change should be non-destructive. Note for library repo maintainers: After applying this change, you can easily add (or change) periodic builds against head by adding config files in google3. See python-pubsub repo for example. Source-Author: Takashi Matsuo Source-Date: Fri Mar 19 11:17:59 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: 79c8dd7ee768292f933012d3a69a5b4676404cda Source-Link: https://github.com/googleapis/synthtool/commit/79c8dd7ee768292f933012d3a69a5b4676404cda * chore(deps): update precommit hook pycqa/flake8 to v3.9.0 [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [pycqa/flake8](https://gitlab.com/pycqa/flake8) | repository | minor | `3.8.4` -> `3.9.0` | --- ### Release Notes
pycqa/flake8 ### [`v3.9.0`](https://gitlab.com/pycqa/flake8/compare/3.8.4...3.9.0) [Compare Source](https://gitlab.com/pycqa/flake8/compare/3.8.4...3.9.0)
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/synthtool). Source-Author: WhiteSource Renovate Source-Date: Tue Mar 23 17:38:03 2021 +0100 Source-Repo: googleapis/synthtool Source-Sha: f5c5904fb0c6aa3b3730eadf4e5a4485afc65726 Source-Link: https://github.com/googleapis/synthtool/commit/f5c5904fb0c6aa3b3730eadf4e5a4485afc65726 * test(python): use constraints files to check dependency lower bounds Use a constraints file when installing dependencies for system and unit tests nox sessions. https://pip.pypa.io/en/stable/user_guide/#constraints-files > Constraints files are requirements files that **only control which version of a requirement is installed, not whether it is installed or not**. Their syntax and contents is nearly identical to Requirements Files. There is one key difference: Including a package in a constraints file does not trigger installation of the package. ``` testing ├── constraints-3.10.txt ├── constraints-3.11.txt ├── constraints-3.6.txt ├── constraints-3.7.txt ├── constraints-3.8.txt └── constraints-3.9.txt ``` Going forward, one constraints file (currently 3.6) will be populated with every library requirement and extra listed in the `setup.py`. The constraints file will pin each requirement to the lower bound. This ensures that library maintainers will see test failures if they forget to update a lower bound on a dependency. See https://github.com/googleapis/python-bigquery/pull/263 for an example Source-Author: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com> Source-Date: Tue Mar 23 10:52:02 2021 -0600 Source-Repo: googleapis/synthtool Source-Sha: 86ed43d4f56e6404d068e62e497029018879c771 Source-Link: https://github.com/googleapis/synthtool/commit/86ed43d4f56e6404d068e62e497029018879c771 * build(python): update docfx job to use new plugin Source-Author: Dan Lee <71398022+dandhlee@users.noreply.github.com> Source-Date: Tue Mar 30 19:36:37 2021 -0400 Source-Repo: googleapis/synthtool Source-Sha: 4501974ad08b5d693311457e2ea4ce845676e329 Source-Link: https://github.com/googleapis/synthtool/commit/4501974ad08b5d693311457e2ea4ce845676e329 --- .../samples/python3.6/periodic-head.cfg | 11 ++ .../samples/python3.7/periodic-head.cfg | 11 ++ .../samples/python3.8/periodic-head.cfg | 11 ++ .../.kokoro/test-samples-against-head.sh | 28 +++++ .../.kokoro/test-samples-impl.sh | 102 ++++++++++++++++++ .../.kokoro/test-samples.sh | 96 +++-------------- .../.pre-commit-config.yaml | 2 +- .../dialogflow-cx-v3beta1-py.tar.gz | Bin 0 -> 65536 bytes .../google/cloud/dialogflowcx_v3/__init__.py | 4 +- .../cloud/dialogflowcx_v3beta1/__init__.py | 4 +- .../google-cloud-dialogflow-cx/noxfile.py | 29 +++-- .../google-cloud-dialogflow-cx/renovate.json | 3 +- .../google-cloud-dialogflow-cx/synth.metadata | 12 ++- 13 files changed, 213 insertions(+), 100 deletions(-) create mode 100644 packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.6/periodic-head.cfg create mode 100644 packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.7/periodic-head.cfg create mode 100644 packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.8/periodic-head.cfg create mode 100755 packages/google-cloud-dialogflow-cx/.kokoro/test-samples-against-head.sh create mode 100755 packages/google-cloud-dialogflow-cx/.kokoro/test-samples-impl.sh create mode 100644 packages/google-cloud-dialogflow-cx/dialogflow-cx-v3beta1-py.tar.gz diff --git a/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.6/periodic-head.cfg b/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.6/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.6/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.7/periodic-head.cfg b/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.7/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.7/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.8/periodic-head.cfg b/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.8/periodic-head.cfg new file mode 100644 index 000000000000..f9cfcd33e058 --- /dev/null +++ b/packages/google-cloud-dialogflow-cx/.kokoro/samples/python3.8/periodic-head.cfg @@ -0,0 +1,11 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +env_vars: { + key: "INSTALL_LIBRARY_FROM_SOURCE" + value: "True" +} + +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/python-pubsub/.kokoro/test-samples-against-head.sh" +} diff --git a/packages/google-cloud-dialogflow-cx/.kokoro/test-samples-against-head.sh b/packages/google-cloud-dialogflow-cx/.kokoro/test-samples-against-head.sh new file mode 100755 index 000000000000..3a5720904019 --- /dev/null +++ b/packages/google-cloud-dialogflow-cx/.kokoro/test-samples-against-head.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A customized test runner for samples. +# +# For periodic builds, you can specify this file for testing against head. + +# `-e` enables the script to automatically fail when a command fails +# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero +set -eo pipefail +# Enables `**` to include files nested inside sub-folders +shopt -s globstar + +cd github/python-dialogflow-cx + +exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-dialogflow-cx/.kokoro/test-samples-impl.sh b/packages/google-cloud-dialogflow-cx/.kokoro/test-samples-impl.sh new file mode 100755 index 000000000000..cf5de74c17a5 --- /dev/null +++ b/packages/google-cloud-dialogflow-cx/.kokoro/test-samples-impl.sh @@ -0,0 +1,102 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# `-e` enables the script to automatically fail when a command fails +# `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero +set -eo pipefail +# Enables `**` to include files nested inside sub-folders +shopt -s globstar + +# Exit early if samples directory doesn't exist +if [ ! -d "./samples" ]; then + echo "No tests run. `./samples` not found" + exit 0 +fi + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Debug: show build environment +env | grep KOKORO + +# Install nox +python3.6 -m pip install --upgrade --quiet nox + +# Use secrets acessor service account to get secrets +if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then + gcloud auth activate-service-account \ + --key-file="${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" \ + --project="cloud-devrel-kokoro-resources" +fi + +# This script will create 3 files: +# - testing/test-env.sh +# - testing/service-account.json +# - testing/client-secrets.json +./scripts/decrypt-secrets.sh + +source ./testing/test-env.sh +export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/testing/service-account.json + +# For cloud-run session, we activate the service account for gcloud sdk. +gcloud auth activate-service-account \ + --key-file "${GOOGLE_APPLICATION_CREDENTIALS}" + +export GOOGLE_CLIENT_SECRETS=$(pwd)/testing/client-secrets.json + +echo -e "\n******************** TESTING PROJECTS ********************" + +# Switch to 'fail at end' to allow all tests to complete before exiting. +set +e +# Use RTN to return a non-zero value if the test fails. +RTN=0 +ROOT=$(pwd) +# Find all requirements.txt in the samples directory (may break on whitespace). +for file in samples/**/requirements.txt; do + cd "$ROOT" + # Navigate to the project folder. + file=$(dirname "$file") + cd "$file" + + echo "------------------------------------------------------------" + echo "- testing $file" + echo "------------------------------------------------------------" + + # Use nox to execute the tests for the project. + python3.6 -m nox -s "$RUN_TESTS_SESSION" + EXIT=$? + + # If this is a periodic build, send the test log to the FlakyBot. + # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. + if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then + chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot + $KOKORO_GFILE_DIR/linux_amd64/flakybot + fi + + if [[ $EXIT -ne 0 ]]; then + RTN=1 + echo -e "\n Testing failed: Nox returned a non-zero exit code. \n" + else + echo -e "\n Testing completed.\n" + fi + +done +cd "$ROOT" + +# Workaround for Kokoro permissions issue: delete secrets +rm testing/{test-env.sh,client-secrets.json,service-account.json} + +exit "$RTN" diff --git a/packages/google-cloud-dialogflow-cx/.kokoro/test-samples.sh b/packages/google-cloud-dialogflow-cx/.kokoro/test-samples.sh index 006d51e05c32..b9f3a6e68004 100755 --- a/packages/google-cloud-dialogflow-cx/.kokoro/test-samples.sh +++ b/packages/google-cloud-dialogflow-cx/.kokoro/test-samples.sh @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# The default test runner for samples. +# +# For periodic builds, we rewinds the repo to the latest release, and +# run test-samples-impl.sh. # `-e` enables the script to automatically fail when a command fails # `-o pipefail` sets the exit code to the rightmost comment to exit with a non-zero @@ -24,87 +28,19 @@ cd github/python-dialogflow-cx # Run periodic samples tests at latest release if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then + # preserving the test runner implementation. + cp .kokoro/test-samples-impl.sh "${TMPDIR}/test-samples-impl.sh" + echo "--- IMPORTANT IMPORTANT IMPORTANT ---" + echo "Now we rewind the repo back to the latest release..." LATEST_RELEASE=$(git describe --abbrev=0 --tags) git checkout $LATEST_RELEASE -fi - -# Exit early if samples directory doesn't exist -if [ ! -d "./samples" ]; then - echo "No tests run. `./samples` not found" - exit 0 -fi - -# Disable buffering, so that the logs stream through. -export PYTHONUNBUFFERED=1 - -# Debug: show build environment -env | grep KOKORO - -# Install nox -python3.6 -m pip install --upgrade --quiet nox - -# Use secrets acessor service account to get secrets -if [[ -f "${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" ]]; then - gcloud auth activate-service-account \ - --key-file="${KOKORO_GFILE_DIR}/secrets_viewer_service_account.json" \ - --project="cloud-devrel-kokoro-resources" -fi - -# This script will create 3 files: -# - testing/test-env.sh -# - testing/service-account.json -# - testing/client-secrets.json -./scripts/decrypt-secrets.sh - -source ./testing/test-env.sh -export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/testing/service-account.json - -# For cloud-run session, we activate the service account for gcloud sdk. -gcloud auth activate-service-account \ - --key-file "${GOOGLE_APPLICATION_CREDENTIALS}" - -export GOOGLE_CLIENT_SECRETS=$(pwd)/testing/client-secrets.json - -echo -e "\n******************** TESTING PROJECTS ********************" - -# Switch to 'fail at end' to allow all tests to complete before exiting. -set +e -# Use RTN to return a non-zero value if the test fails. -RTN=0 -ROOT=$(pwd) -# Find all requirements.txt in the samples directory (may break on whitespace). -for file in samples/**/requirements.txt; do - cd "$ROOT" - # Navigate to the project folder. - file=$(dirname "$file") - cd "$file" - - echo "------------------------------------------------------------" - echo "- testing $file" - echo "------------------------------------------------------------" - - # Use nox to execute the tests for the project. - python3.6 -m nox -s "$RUN_TESTS_SESSION" - EXIT=$? - - # If this is a periodic build, send the test log to the FlakyBot. - # See https://github.com/googleapis/repo-automation-bots/tree/master/packages/flakybot. - if [[ $KOKORO_BUILD_ARTIFACTS_SUBDIR = *"periodic"* ]]; then - chmod +x $KOKORO_GFILE_DIR/linux_amd64/flakybot - $KOKORO_GFILE_DIR/linux_amd64/flakybot + echo "The current head is: " + echo $(git rev-parse --verify HEAD) + echo "--- IMPORTANT IMPORTANT IMPORTANT ---" + # move back the test runner implementation if there's no file. + if [ ! -f .kokoro/test-samples-impl.sh ]; then + cp "${TMPDIR}/test-samples-impl.sh" .kokoro/test-samples-impl.sh fi +fi - if [[ $EXIT -ne 0 ]]; then - RTN=1 - echo -e "\n Testing failed: Nox returned a non-zero exit code. \n" - else - echo -e "\n Testing completed.\n" - fi - -done -cd "$ROOT" - -# Workaround for Kokoro permissions issue: delete secrets -rm testing/{test-env.sh,client-secrets.json,service-account.json} - -exit "$RTN" +exec .kokoro/test-samples-impl.sh diff --git a/packages/google-cloud-dialogflow-cx/.pre-commit-config.yaml b/packages/google-cloud-dialogflow-cx/.pre-commit-config.yaml index a9024b15d725..32302e4883a1 100644 --- a/packages/google-cloud-dialogflow-cx/.pre-commit-config.yaml +++ b/packages/google-cloud-dialogflow-cx/.pre-commit-config.yaml @@ -12,6 +12,6 @@ repos: hooks: - id: black - repo: https://gitlab.com/pycqa/flake8 - rev: 3.8.4 + rev: 3.9.0 hooks: - id: flake8 diff --git a/packages/google-cloud-dialogflow-cx/dialogflow-cx-v3beta1-py.tar.gz b/packages/google-cloud-dialogflow-cx/dialogflow-cx-v3beta1-py.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..be1784284d821d3d87851bdecf6e97d84e6dbdf4 GIT binary patch literal 65536 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 Lc{^pGc-j0vF)h}Z literal 0 HcmV?d00001 diff --git a/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3/__init__.py b/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3/__init__.py index 589dcd2086b8..f328b0944398 100644 --- a/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3/__init__.py +++ b/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3/__init__.py @@ -251,7 +251,6 @@ "DetectIntentResponse", "DtmfInput", "EntityType", - "EntityTypesClient", "Environment", "EnvironmentsClient", "EventHandler", @@ -293,6 +292,7 @@ "IntentCoverage", "IntentInput", "IntentView", + "IntentsClient", "ListAgentsRequest", "ListAgentsResponse", "ListEntityTypesRequest", @@ -399,5 +399,5 @@ "WebhookRequest", "WebhookResponse", "WebhooksClient", - "IntentsClient", + "EntityTypesClient", ) diff --git a/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3beta1/__init__.py b/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3beta1/__init__.py index 3167e84a3bcb..5e50202b97f7 100644 --- a/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3beta1/__init__.py +++ b/packages/google-cloud-dialogflow-cx/google/cloud/dialogflowcx_v3beta1/__init__.py @@ -211,6 +211,7 @@ __all__ = ( "Agent", "AgentValidationResult", + "AgentsClient", "AudioEncoding", "AudioInput", "BatchDeleteTestCasesRequest", @@ -252,7 +253,6 @@ "EntityType", "EntityTypesClient", "Environment", - "EnvironmentsClient", "EventHandler", "EventInput", "Experiment", @@ -399,5 +399,5 @@ "WebhookRequest", "WebhookResponse", "WebhooksClient", - "AgentsClient", + "EnvironmentsClient", ) diff --git a/packages/google-cloud-dialogflow-cx/noxfile.py b/packages/google-cloud-dialogflow-cx/noxfile.py index 0ad24c69cae6..0f27c1ff8896 100644 --- a/packages/google-cloud-dialogflow-cx/noxfile.py +++ b/packages/google-cloud-dialogflow-cx/noxfile.py @@ -18,6 +18,7 @@ from __future__ import absolute_import import os +import pathlib import shutil import nox @@ -30,6 +31,8 @@ SYSTEM_TEST_PYTHON_VERSIONS = ["3.8"] UNIT_TEST_PYTHON_VERSIONS = ["3.6", "3.7", "3.8", "3.9"] +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() + # 'docfx' is excluded since it only needs to run in 'docs-presubmit' nox.options.sessions = [ "unit", @@ -41,6 +44,9 @@ "docs", ] +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + @nox.session(python=DEFAULT_PYTHON_VERSION) def lint(session): @@ -81,13 +87,15 @@ def lint_setup_py(session): def default(session): # Install all test dependencies, then install this package in-place. - session.install("asyncmock", "pytest-asyncio") - session.install( - "mock", "pytest", "pytest-cov", + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" ) + session.install("asyncmock", "pytest-asyncio", "-c", constraints_path) - session.install("-e", ".") + session.install("mock", "pytest", "pytest-cov", "-c", constraints_path) + + session.install("-e", ".", "-c", constraints_path) # Run py.test against the unit tests. session.run( @@ -114,6 +122,9 @@ def unit(session): @nox.session(python=SYSTEM_TEST_PYTHON_VERSIONS) def system(session): """Run the system test suite.""" + constraints_path = str( + CURRENT_DIRECTORY / "testing" / f"constraints-{session.python}.txt" + ) system_test_path = os.path.join("tests", "system.py") system_test_folder_path = os.path.join("tests", "system") @@ -138,10 +149,8 @@ def system(session): # Install all test dependencies, then install this package into the # virtualenv's dist-packages. - session.install( - "mock", "pytest", "google-cloud-testutils", - ) - session.install("-e", ".") + session.install("mock", "pytest", "google-cloud-testutils", "-c", constraints_path) + session.install("-e", ".", "-c", constraints_path) # Run py.test against the system tests. if system_test_exists: @@ -201,9 +210,7 @@ def docfx(session): """Build the docfx yaml files for this library.""" session.install("-e", ".") - # sphinx-docfx-yaml supports up to sphinx version 1.5.5. - # https://github.com/docascode/sphinx-docfx-yaml/issues/97 - session.install("sphinx==1.5.5", "alabaster", "recommonmark", "sphinx-docfx-yaml") + session.install("sphinx", "alabaster", "recommonmark", "gcp-sphinx-docfx-yaml") shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( diff --git a/packages/google-cloud-dialogflow-cx/renovate.json b/packages/google-cloud-dialogflow-cx/renovate.json index 4fa949311b20..f08bc22c9a55 100644 --- a/packages/google-cloud-dialogflow-cx/renovate.json +++ b/packages/google-cloud-dialogflow-cx/renovate.json @@ -1,5 +1,6 @@ { "extends": [ "config:base", ":preserveSemverRanges" - ] + ], + "ignorePaths": [".pre-commit-config.yaml"] } diff --git a/packages/google-cloud-dialogflow-cx/synth.metadata b/packages/google-cloud-dialogflow-cx/synth.metadata index 50c9c20333e6..d3781971b50a 100644 --- a/packages/google-cloud-dialogflow-cx/synth.metadata +++ b/packages/google-cloud-dialogflow-cx/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-dialogflow-cx.git", - "sha": "aeb1ce98ddba2dd4f3ccc874608d6127ccaee3df" + "sha": "3440f186cd879fd4ddc9b3442bf857a4f286698e" } }, { @@ -19,14 +19,14 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "6056faa36b3ab941a56f71eab8164e78af998844" + "sha": "4501974ad08b5d693311457e2ea4ce845676e329" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "6056faa36b3ab941a56f71eab8164e78af998844" + "sha": "4501974ad08b5d693311457e2ea4ce845676e329" } } ], @@ -83,16 +83,21 @@ ".kokoro/samples/lint/presubmit.cfg", ".kokoro/samples/python3.6/common.cfg", ".kokoro/samples/python3.6/continuous.cfg", + ".kokoro/samples/python3.6/periodic-head.cfg", ".kokoro/samples/python3.6/periodic.cfg", ".kokoro/samples/python3.6/presubmit.cfg", ".kokoro/samples/python3.7/common.cfg", ".kokoro/samples/python3.7/continuous.cfg", + ".kokoro/samples/python3.7/periodic-head.cfg", ".kokoro/samples/python3.7/periodic.cfg", ".kokoro/samples/python3.7/presubmit.cfg", ".kokoro/samples/python3.8/common.cfg", ".kokoro/samples/python3.8/continuous.cfg", + ".kokoro/samples/python3.8/periodic-head.cfg", ".kokoro/samples/python3.8/periodic.cfg", ".kokoro/samples/python3.8/presubmit.cfg", + ".kokoro/test-samples-against-head.sh", + ".kokoro/test-samples-impl.sh", ".kokoro/test-samples.sh", ".kokoro/trampoline.sh", ".kokoro/trampoline_v2.sh", @@ -102,6 +107,7 @@ "CONTRIBUTING.rst", "LICENSE", "MANIFEST.in", + "dialogflow-cx-v3beta1-py.tar.gz", "docs/_static/custom.css", "docs/_templates/layout.html", "docs/conf.py",