From 55c3a284126a3afae70a05728465a25f18035407 Mon Sep 17 00:00:00 2001 From: Xueqin Cui <72771658+cuixq@users.noreply.github.com> Date: Tue, 12 Mar 2024 15:28:12 +1100 Subject: [PATCH 01/56] adjust retry strategy for `blob.upload_from_filename` (#2046) As per suggestion here https://github.com/googleapis/python-storage/issues/1232#issuecomment-1967844331 --- docker/exporter/exporter.py | 2 +- tools/datafix/reimport_gcs_record.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/exporter/exporter.py b/docker/exporter/exporter.py index 0dc0d6254b3..b9ca97ac655 100755 --- a/docker/exporter/exporter.py +++ b/docker/exporter/exporter.py @@ -59,7 +59,7 @@ def upload_single(self, bucket, source_path, target_path): logging.info('Uploading %s', target_path) try: blob = bucket.blob(target_path) - blob.upload_from_filename(source_path) + blob.upload_from_filename(source_path, retry=storage.DEFAULT_RETRY) except Exception as e: logging.exception('Failed to export: %s', e) diff --git a/tools/datafix/reimport_gcs_record.py b/tools/datafix/reimport_gcs_record.py index b54c524d513..5c4bad2ff6e 100755 --- a/tools/datafix/reimport_gcs_record.py +++ b/tools/datafix/reimport_gcs_record.py @@ -112,7 +112,7 @@ def reset_object_creation(bucket_name: str, bucket = gcs_client.bucket(bucket_name) blob = bucket.blob(blob_name) blob.download_to_filename(local_tmp_file) - blob.upload_from_filename(local_tmp_file) + blob.upload_from_filename(local_tmp_file, retry=storage.DEFAULT_RETRY) os.unlink(local_tmp_file) From e6ae91edd576356d2d8779f7c330ca8246a1b41b Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Tue, 12 Mar 2024 15:06:08 +1000 Subject: [PATCH 02/56] Also stage the CSV conversion summary (#2045) Pre-copying the CSV summary to GCS before the final rsync with `--delete-unmatched` (as introduced in #2023) just means that they don't survive :-( --- vulnfeeds/cmd/nvd-cve-osv/run_cve_to_osv_generation.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vulnfeeds/cmd/nvd-cve-osv/run_cve_to_osv_generation.sh b/vulnfeeds/cmd/nvd-cve-osv/run_cve_to_osv_generation.sh index f3d0390dc8f..59eab3784de 100755 --- a/vulnfeeds/cmd/nvd-cve-osv/run_cve_to_osv_generation.sh +++ b/vulnfeeds/cmd/nvd-cve-osv/run_cve_to_osv_generation.sh @@ -48,11 +48,11 @@ for (( YEAR = $(date +%Y) ; YEAR >= ${FIRST_INSCOPE_YEAR} ; YEAR-- )); do find "${WORK_DIR}/nvd2osv/${YEAR}" -type f -name \*.json \ -exec cp '{}' "${WORK_DIR}/nvd2osv/gcs_stage/" \; - # Copy conversion summary to GCS bucket. - DURABLE_OUTCOMES_CSV="${OSV_OUTPUT_GCS_PATH}/nvd-conversion-outcomes-${YEAR}-$(date -Iminutes).csv" - gcloud --no-user-output-enabled storage -q cp "${WORK_DIR}/nvd2osv/${YEAR}/outcomes.csv" "$DURABLE_OUTCOMES_CSV" + # Copy conversion summary staging area. + DURABLE_OUTCOMES_CSV="nvd-conversion-outcomes-${YEAR}-$(date -Iminutes).csv" + cp "${WORK_DIR}/nvd2osv/${YEAR}/outcomes.csv" "${WORK_DIR}/nvd2osv/gcs_stage/${DURABLE_OUTCOMES_CSV}" - echo "Results summary available at $DURABLE_OUTCOMES_CSV" + echo "Results summary will be available in ${OSV_OUTPUT_GCS_PATH}/${DURABLE_OUTCOMES_CSV}" done # Copy results to GCS bucket. From 0f17f8f603cb66131eac70ee0eb28d03739fe89e Mon Sep 17 00:00:00 2001 From: Rex P <106129829+another-rex@users.noreply.github.com> Date: Tue, 12 Mar 2024 16:15:25 +1100 Subject: [PATCH 03/56] Lower concurrency to improve performance (#2048) Reduce concurrency from 10 to 5 to reduce the number of inflight data store queries are being made per instance. This is an attempt at fixing the latency/timeout issues for the batch_query API endpoint. --- deployment/clouddeploy/osv-api/run.yaml | 2 +- gcp/api/server.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment/clouddeploy/osv-api/run.yaml b/deployment/clouddeploy/osv-api/run.yaml index 801e99c9361..b2c4c20ea72 100644 --- a/deployment/clouddeploy/osv-api/run.yaml +++ b/deployment/clouddeploy/osv-api/run.yaml @@ -20,4 +20,4 @@ spec: failureThreshold: 3 periodSeconds: 10 timeoutSeconds: 60 - containerConcurrency: 10 + containerConcurrency: 5 diff --git a/gcp/api/server.py b/gcp/api/server.py index fd87fccfe4e..5dee198a7ae 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -1007,7 +1007,7 @@ def query_by_package(context: QueryContext, package_name: str, ecosystem: str, def serve(port: int, local: bool): """Configures and runs the OSV API server.""" - server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=10)) + server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=5)) servicer = OSVServicer() osv_service_v1_pb2_grpc.add_OSVServicer_to_server(servicer, server) health_pb2_grpc.add_HealthServicer_to_server(servicer, server) From dcb6a15f10cc452b4fbde415e2cb1c1932878049 Mon Sep 17 00:00:00 2001 From: Xueqin Cui <72771658+cuixq@users.noreply.github.com> Date: Tue, 12 Mar 2024 16:42:51 +1100 Subject: [PATCH 04/56] import retry module (#2049) Fixes the issue `AttributeError: module 'google.cloud.storage' has no attribute` brought by https://github.com/google/osv.dev/pull/2046 --- docker/exporter/exporter.py | 3 ++- tools/datafix/reimport_gcs_record.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/exporter/exporter.py b/docker/exporter/exporter.py index b9ca97ac655..87043ac35ee 100755 --- a/docker/exporter/exporter.py +++ b/docker/exporter/exporter.py @@ -24,6 +24,7 @@ from google.cloud import ndb from google.cloud import storage +from google.cloud.storage import retry import osv import osv.logs @@ -59,7 +60,7 @@ def upload_single(self, bucket, source_path, target_path): logging.info('Uploading %s', target_path) try: blob = bucket.blob(target_path) - blob.upload_from_filename(source_path, retry=storage.DEFAULT_RETRY) + blob.upload_from_filename(source_path, retry=retry.DEFAULT_RETRY) except Exception as e: logging.exception('Failed to export: %s', e) diff --git a/tools/datafix/reimport_gcs_record.py b/tools/datafix/reimport_gcs_record.py index 5c4bad2ff6e..39d71156cdb 100755 --- a/tools/datafix/reimport_gcs_record.py +++ b/tools/datafix/reimport_gcs_record.py @@ -16,6 +16,7 @@ from google.cloud import datastore from google.cloud import storage +from google.cloud.storage import retry from google.cloud.datastore.query import PropertyFilter import argparse @@ -112,7 +113,7 @@ def reset_object_creation(bucket_name: str, bucket = gcs_client.bucket(bucket_name) blob = bucket.blob(blob_name) blob.download_to_filename(local_tmp_file) - blob.upload_from_filename(local_tmp_file, retry=storage.DEFAULT_RETRY) + blob.upload_from_filename(local_tmp_file, retry=retry.DEFAULT_RETRY) os.unlink(local_tmp_file) From 2e7ee6568e0f785a913d7c3d015500ea50667d8e Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Wed, 13 Mar 2024 10:25:53 +1100 Subject: [PATCH 05/56] Add some logging to API queries (#2047) Log the type of query the API gets (`git`, `commit`, `ecosystem`, `invalid`) so we can better debug long-running queries. Trying out [structured json logging](https://cloud.google.com/python/docs/reference/logging/latest/std-lib-integration#logging-json-payloads) in GCP to maybe make it more easily searchable. --- gcp/api/server.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/gcp/api/server.py b/gcp/api/server.py index 5dee198a7ae..192f6a77264 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -126,6 +126,24 @@ def QueryAffected(self, request, context: grpc.ServicerContext): version. """ + + # Log some information about the query with structured logging + qtype, ecosystem, versioned = query_info(request.query) + if qtype == 'ecosystem': + logging.info( + 'QueryAffected for ecosystem "%s"', + ecosystem, + extra={ + 'json_fields': { + 'details': { + 'ecosystem': ecosystem, + 'versioned': versioned == 'versioned' + } + } + }) + else: + logging.info('QueryAffected for %s', qtype) + page_token = None if request.query.page_token: try: @@ -163,6 +181,42 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): batch_results = [] futures = [] + # Log some information about the query with structured logging e.g. + # "message": "QueryAffectedBatch with 15 queries", + # "details": { + # "commit": 1, + # "purl": 2, + # "ecosystem": { + # "PyPI": { + # "versioned": 4, + # "versionless": 5 + # }, + # "": { // no ecosystem specified + # "versioned": 1, + # } + # }, + # "invalid": 2 + # } + # Fields are not included if the value is 0 + query_details = defaultdict(int) + query_details['ecosystem'] = defaultdict(lambda: defaultdict(int)) + for query in request.query.queries: + qtype, ecosystem, versioned = query_info(query) + if qtype == 'ecosystem': + query_details['ecosystem'][ecosystem][versioned] += 1 + else: + query_details[qtype] += 1 + + if len(query_details['ecosystem']) == 0: + del query_details['ecosystem'] + + logging.info( + 'QueryAffectedBatch with %d queries', + len(request.query.queries), + extra={'json_fields': { + 'details': query_details + }}) + if len(request.query.queries) > _MAX_BATCH_QUERY: context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Too many queries.') return None @@ -228,6 +282,23 @@ def Watch(self, request, context: grpc.ServicerContext): context.abort(grpc.StatusCode.UNIMPLEMENTED, "Unimplemented") +def query_info(query) -> tuple[str, str, str]: + """Returns information about a query, for logging purposes. + First return value is one of 'commit', 'purl', 'ecosystem', 'invalid'. + If 'ecosystem', second two return values are the ecosystem name, + then 'versioned' or 'versionless' depending if the 'version' field is set. + Otherwise, last two return values are None. + """ + if query.WhichOneof('param') == 'commit': + return 'commit', None, None + if not query.HasField('package'): + return 'invalid', None, None + if query.package.purl: + return 'purl', None, None + versioned = 'versioned' if query.version else 'versionless' + return 'ecosystem', query.package.ecosystem, versioned + + # Wrapped in a separate class @dataclass class ResponsesCount: From 77ae40037a5c92bb3d04775a2fab70043ef7058d Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Wed, 13 Mar 2024 11:17:10 +1100 Subject: [PATCH 06/56] Temp fix for logging errors & Parse PURLs for logs (#2051) The way I've been adding error reporting information is incompatible with defining extra json fields. :( Tests didn't pick this up because it's only enabled when running on Cloud Run :( For now, just dump the json string into the log message PURL parsing re: https://github.com/google/osv.dev/pull/2047#discussion_r1520836700 Also checks a bit more thoroughly for invalid queries --- gcp/api/server.py | 77 ++++++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/gcp/api/server.py b/gcp/api/server.py index 192f6a77264..a45ac3ec40e 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -129,18 +129,17 @@ def QueryAffected(self, request, context: grpc.ServicerContext): # Log some information about the query with structured logging qtype, ecosystem, versioned = query_info(request.query) - if qtype == 'ecosystem': + if ecosystem is not None: + # TODO(michaelkedar): work out how to combine json_fields with osv/logs.py + import json logging.info( - 'QueryAffected for ecosystem "%s"', - ecosystem, - extra={ - 'json_fields': { - 'details': { - 'ecosystem': ecosystem, - 'versioned': versioned == 'versioned' - } + 'QueryAffected for %s "%s"\n%s', qtype, ecosystem, + json.dumps({ + 'details': { + 'ecosystem': ecosystem, + 'versioned': versioned == 'versioned' } - }) + })) else: logging.info('QueryAffected for %s', qtype) @@ -185,7 +184,6 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): # "message": "QueryAffectedBatch with 15 queries", # "details": { # "commit": 1, - # "purl": 2, # "ecosystem": { # "PyPI": { # "versioned": 4, @@ -195,27 +193,35 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): # "versioned": 1, # } # }, + # "purl": { + # "golang": { // purl type, not OSV ecosystem + # "versionless": 1 + # } + # } # "invalid": 2 # } - # Fields are not included if the value is 0 - query_details = defaultdict(int) - query_details['ecosystem'] = defaultdict(lambda: defaultdict(int)) + # Fields are not included if the value is empty/0 + query_details = { + 'commit': 0, + 'ecosystem': defaultdict(lambda: defaultdict(int)), + 'purl': defaultdict(lambda: defaultdict(int)), + 'invalid': 0, + } for query in request.query.queries: qtype, ecosystem, versioned = query_info(query) - if qtype == 'ecosystem': - query_details['ecosystem'][ecosystem][versioned] += 1 + if ecosystem is not None: + query_details[qtype][ecosystem][versioned] += 1 else: query_details[qtype] += 1 - if len(query_details['ecosystem']) == 0: - del query_details['ecosystem'] + # Filter out empty fields + query_details = {k: v for k, v in query_details.items() if v} - logging.info( - 'QueryAffectedBatch with %d queries', - len(request.query.queries), - extra={'json_fields': { - 'details': query_details - }}) + # TODO(michaelkedar): work out how to combine json_fields with osv/logs.py + import json + logging.info('QueryAffectedBatch with %d queries\n%s', + len(request.query.queries), + json.dumps({'details': query_details})) if len(request.query.queries) > _MAX_BATCH_QUERY: context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Too many queries.') @@ -285,7 +291,7 @@ def Watch(self, request, context: grpc.ServicerContext): def query_info(query) -> tuple[str, str, str]: """Returns information about a query, for logging purposes. First return value is one of 'commit', 'purl', 'ecosystem', 'invalid'. - If 'ecosystem', second two return values are the ecosystem name, + If 'ecosystem' or 'purl', second two return values are the ecosystem name, then 'versioned' or 'versionless' depending if the 'version' field is set. Otherwise, last two return values are None. """ @@ -293,10 +299,25 @@ def query_info(query) -> tuple[str, str, str]: return 'commit', None, None if not query.HasField('package'): return 'invalid', None, None + if not query.package.purl and not query.package.name: + return 'invalid', None, None + qtype = 'ecosystem' + ecosystem = query.package.ecosystem + version = query.version if query.package.purl: - return 'purl', None, None - versioned = 'versioned' if query.version else 'versionless' - return 'ecosystem', query.package.ecosystem, versioned + try: + purl = PackageURL.from_string(query.package.purl) # can raise ValueError + if query.package.ecosystem or query.package.name: + raise ValueError('purl and name/ecosystem cannot both be specified') + if purl.version and query.version: + raise ValueError('purl version and version cannot both be specified') + qtype = 'purl' + ecosystem = purl.type + version = purl.version or version + except ValueError: + return 'invalid', None, None + + return qtype, ecosystem, 'versioned' if version else 'versionless' # Wrapped in a separate class From 132562ebac1f674eb92231ab5754b1344a3ff4ee Mon Sep 17 00:00:00 2001 From: Rex P <106129829+another-rex@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:18:41 +1100 Subject: [PATCH 07/56] Increase max instances (#2053) Increase the max instance count, default is 100. We are currently running into the max instance count (or almost running into it, there is 97 instances running at the moment). --- deployment/clouddeploy/osv-api/run.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deployment/clouddeploy/osv-api/run.yaml b/deployment/clouddeploy/osv-api/run.yaml index b2c4c20ea72..7841c6b18af 100644 --- a/deployment/clouddeploy/osv-api/run.yaml +++ b/deployment/clouddeploy/osv-api/run.yaml @@ -4,6 +4,9 @@ metadata: name: osv-grpc-backend spec: template: + metadata: + annotations: + autoscaling.knative.dev/maxScale: '300' spec: containers: - image: osv-server From 352c041c24269c2bcb13027a1dcda1a6103fc6bd Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Wed, 13 Mar 2024 14:21:31 +1100 Subject: [PATCH 08/56] Allow for json fields in python logs (#2052) The way Error Reporting information was being added to logs was preventing us from adding additional `json_fields` to our logs. Changed from inserting Error Reporting information in a Log Record Factory to a Log Filter. See: https://docs.python.org/3/howto/logging-cookbook.html#using-filters-to-impart-contextual-information Also put the API logged fields back into the json data. --------- Co-authored-by: Andrew Pollock --- gcp/api/server.py | 29 ++++++++++++++++------------- osv/logs.py | 38 ++++++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/gcp/api/server.py b/gcp/api/server.py index a45ac3ec40e..fa3290a0d47 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -130,16 +130,18 @@ def QueryAffected(self, request, context: grpc.ServicerContext): # Log some information about the query with structured logging qtype, ecosystem, versioned = query_info(request.query) if ecosystem is not None: - # TODO(michaelkedar): work out how to combine json_fields with osv/logs.py - import json logging.info( - 'QueryAffected for %s "%s"\n%s', qtype, ecosystem, - json.dumps({ - 'details': { - 'ecosystem': ecosystem, - 'versioned': versioned == 'versioned' + 'QueryAffected for %s "%s"', + qtype, + ecosystem, + extra={ + 'json_fields': { + 'details': { + 'ecosystem': ecosystem, + 'versioned': versioned == 'versioned' + } } - })) + }) else: logging.info('QueryAffected for %s', qtype) @@ -217,11 +219,12 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): # Filter out empty fields query_details = {k: v for k, v in query_details.items() if v} - # TODO(michaelkedar): work out how to combine json_fields with osv/logs.py - import json - logging.info('QueryAffectedBatch with %d queries\n%s', - len(request.query.queries), - json.dumps({'details': query_details})) + logging.info( + 'QueryAffectedBatch with %d queries', + len(request.query.queries), + extra={'json_fields': { + 'details': query_details + }}) if len(request.query.queries) > _MAX_BATCH_QUERY: context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Too many queries.') diff --git a/osv/logs.py b/osv/logs.py index b09250c3067..1484e89bf60 100644 --- a/osv/logs.py +++ b/osv/logs.py @@ -17,30 +17,29 @@ from google.cloud import logging as google_logging -def setup_gcp_logging(service_name): - """Set up GCP logging and error reporting.""" +class _ErrorReportingFilter: + """ + A logging filter that adds necessary JSON fields to error logs so that they + can be picked up by Error Reporting. + + https://cloud.google.com/error-reporting/docs/formatting-error-messages#log-text + https://docs.python.org/3/howto/logging-cookbook.html#using-filters-to-impart-contextual-information + """ - logging_client = google_logging.Client() - logging_client.setup_logging() + def __init__(self, service_name: str) -> None: + self.service_name = service_name - old_factory = logging.getLogRecordFactory() - - def record_factory(*args, **kwargs): - """Insert jsonPayload fields to all logs.""" - - record = old_factory(*args, **kwargs) + def filter(self, record: logging.LogRecord) -> bool: + """Add the error reporting fields to json_fields.""" if not hasattr(record, 'json_fields'): record.json_fields = {} - # Add jsonPayload fields to logs that don't contain stack traces to enable - # capturing and grouping by error reporting. - # https://cloud.google.com/error-reporting/docs/formatting-error-messages#log-text if record.levelno >= logging.ERROR and not record.exc_info: record.json_fields.update({ '@type': 'type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent', # pylint: disable=line-too-long 'serviceContext': { - 'service': service_name, + 'service': self.service_name, }, 'context': { 'reportLocation': { @@ -51,9 +50,16 @@ def record_factory(*args, **kwargs): }, }) - return record + return True + + +def setup_gcp_logging(service_name): + """Set up GCP logging and error reporting.""" + + logging_client = google_logging.Client() + logging_client.setup_logging() - logging.setLogRecordFactory(record_factory) + logging.getLogger().addFilter(_ErrorReportingFilter(service_name)) logging.getLogger().setLevel(logging.INFO) # Suppress noisy logs in some of our dependencies. From f532637d69ac886df1fcf7b2e31f90b19df6f351 Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Wed, 13 Mar 2024 16:04:09 +1000 Subject: [PATCH 09/56] Stage templated human links for production (#2037) When #2031 is released to Production, the human-friendly links will need to be updated in short order afterwards to avoid disappointment. Do not merge until after the release for the week of 2024/03/11 --- source.yaml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/source.yaml b/source.yaml index 752a8d75c1b..a7e4b10ed6a 100644 --- a/source.yaml +++ b/source.yaml @@ -8,6 +8,7 @@ extension: .json db_prefix: ALBA- ignore_git: False + human_link: 'https://errata.almalinux.org/{{ ECOSYSTEMS[1].split(":")[1] }}/{{ BUG_ID | replace(":", "-", 1) }}.html' link: https://github.com/AlmaLinux/osv-database/blob/master/ editable: False @@ -21,6 +22,7 @@ extension: .json db_prefix: ALEA- ignore_git: False + human_link: 'https://errata.almalinux.org/{{ ECOSYSTEMS[1].split(":")[1] }}/{{ BUG_ID | replace(":", "-", 1) }}.html' link: https://github.com/AlmaLinux/osv-database/blob/master/ editable: False @@ -34,6 +36,7 @@ extension: .json db_prefix: ALSA- ignore_git: False + human_link: 'https://errata.almalinux.org/{{ ECOSYSTEMS[1].split(":")[1] }}/{{ BUG_ID | replace(":", "-", 1) }}.html' link: https://github.com/AlmaLinux/osv-database/blob/master/ editable: False @@ -69,6 +72,7 @@ extension: .json db_prefix: CURL- ignore_git: True + human_link: 'https://curl.se/docs/{{ BUG_ID | replace("CURL-", "") }}.html' link: https://curl.se/docs/ editable: False @@ -81,7 +85,7 @@ bucket: cve-osv-conversion db_prefix: CVE- ignore_git: False - human_link: https://nvd.nist.gov/vuln/detail/ + human_link: 'https://nvd.nist.gov/vuln/detail/{{ BUG_ID }}' link: https://storage.googleapis.com/cve-osv-conversion/ editable: False @@ -94,7 +98,7 @@ bucket: debian-osv db_prefix: DLA- ignore_git: True - human_link: 'https://security-tracker.debian.org/tracker/' + human_link: 'https://security-tracker.debian.org/tracker/{{ BUG_ID }}' link: https://storage.googleapis.com/debian-osv/ editable: False @@ -107,7 +111,7 @@ bucket: debian-osv db_prefix: DSA- ignore_git: True - human_link: https://security-tracker.debian.org/tracker/ + human_link: 'https://security-tracker.debian.org/tracker/{{ BUG_ID }}' link: https://storage.googleapis.com/debian-osv/ editable: False @@ -120,7 +124,7 @@ bucket: debian-osv db_prefix: DTSA- ignore_git: True - human_link: 'https://security-tracker.debian.org/tracker/' + human_link: 'https://security-tracker.debian.org/tracker/{{ BUG_ID }}' link: https://storage.googleapis.com/debian-osv/ editable: False @@ -133,7 +137,7 @@ extension: .json db_prefix: GHSA- ignore_git: True - human_link: https://github.com/advisories/ + human_link: 'https://github.com/advisories/{{ BUG_ID }}' link: https://github.com/github/advisory-database/blob/main/ editable: False @@ -147,7 +151,7 @@ bucket: go-vulndb db_prefix: GO- ignore_git: True - human_link: https://pkg.go.dev/vuln/ + human_link: 'https://pkg.go.dev/vuln/{{ BUG_ID }}' link: https://vuln.go.dev/ editable: False @@ -262,7 +266,7 @@ extension: .json db_prefix: RUSTSEC- ignore_git: False - human_link: https://rustsec.org/advisories/ + human_link: 'https://rustsec.org/advisories/{{ BUG_ID }}' link: https://github.com/rustsec/advisory-db/blob/osv/ editable: False repo_username: git From d2f4645213189341d06ffcea04998d253c5c473f Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 14 Mar 2024 06:01:03 +0100 Subject: [PATCH 10/56] chore(deps): update workflows (#2050) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://togithub.com/github/codeql-action) | action | patch | `v2.24.6` -> `v2.24.7` | | [pypa/gh-action-pypi-publish](https://togithub.com/pypa/gh-action-pypi-publish) | action | patch | `v1.8.12` -> `v1.8.14` | --- ### Release Notes
github/codeql-action (github/codeql-action) ### [`v2.24.7`](https://togithub.com/github/codeql-action/compare/v2.24.6...v2.24.7) [Compare Source](https://togithub.com/github/codeql-action/compare/v2.24.6...v2.24.7)
pypa/gh-action-pypi-publish (pypa/gh-action-pypi-publish) ### [`v1.8.14`](https://togithub.com/pypa/gh-action-pypi-publish/releases/tag/v1.8.14) [Compare Source](https://togithub.com/pypa/gh-action-pypi-publish/compare/v1.8.13...v1.8.14) #### πŸ› οΈ Internal Dependencies Nothing changed feature-wise. The only notable update is that the underlying container runtime now uses Python 3.12 and pip has been updated to v24.0 there. This is should go unnoticed in terms of behavior. It's just a bit of maintenance burden to be done occasionally by [@​webknjaz](https://togithub.com/webknjaz)[πŸ’°](https://togithub.com/sponsors/webknjaz). *Enjoy!* **πŸͺž Full Diff**: https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.13...v1.8.14 **πŸ§”β€β™‚οΈ Release Manager:** [@​webknjaz πŸ‡ΊπŸ‡¦](https://togithub.com/sponsors/webknjaz) ### [`v1.8.13`](https://togithub.com/pypa/gh-action-pypi-publish/releases/tag/v1.8.13) [Compare Source](https://togithub.com/pypa/gh-action-pypi-publish/compare/v1.8.12...v1.8.13) #### πŸ› What's Fixed This action is now able to consume and publish distribution packages with `Metadata-Version: 2.3` embedded. #### πŸ› οΈ Internal Dependencies [@​SigureMo](https://togithub.com/SigureMo)[πŸ’°](https://togithub.com/sponsors/SigureMo) sent us a bump of `pkginfo` version to version 1.10.0 in [#​219](https://togithub.com/pypa/gh-action-pypi-publish/issues/219). It's a transitive dependency for us and is not an API-level change but upgrading it has a side effect of letting Twine recognize distribution packages [declaring `Metadata-Version: 2.3`](https://packaging.python.org/en/latest/specifications/core-metadata/). In particular, it is known to affect distributions built with `Maturin >= 1.5.0`. Following that, [@​webknjaz](https://togithub.com/webknjaz)[πŸ’°](https://togithub.com/sponsors/webknjaz) upgraded other transitive and direct dependency pins, including, among others, the following notable bumps: - `cryptography == 42.0.5` - `id == 1.3.0` - `readme-renderer == 43.0` - `Twine == 5.0.0` #### πŸ’ͺ New Contributors [@​SigureMo](https://togithub.com/SigureMo) made their first contribution in [https://github.com/pypa/gh-action-pypi-publish/pull/219](https://togithub.com/pypa/gh-action-pypi-publish/pull/219) **πŸͺž Full Diff**: https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.12...v1.8.13 **πŸ§”β€β™‚οΈ Release Manager:** [@​webknjaz πŸ‡ΊπŸ‡¦](https://togithub.com/sponsors/webknjaz)
--- ### Configuration πŸ“… **Schedule**: Branch creation - "before 6am on wednesday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- .github/workflows/publish-to-pypi.yaml | 2 +- .github/workflows/scorecards.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-to-pypi.yaml b/.github/workflows/publish-to-pypi.yaml index 5041ca07412..d4206631ebd 100644 --- a/.github/workflows/publish-to-pypi.yaml +++ b/.github/workflows/publish-to-pypi.yaml @@ -44,7 +44,7 @@ jobs: build --sdist --wheel --outdir dist/ . - name: Publish distribution to PyPI - uses: pypa/gh-action-pypi-publish@e53eb8b103ffcb59469888563dc324e3c8ba6f06 # v1.8.12 + uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 # v1.8.14 with: password: ${{ secrets.PYPI_API_TOKEN }} packages_dir: dist/ diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 161c3ed2ded..7549be1db5e 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -50,6 +50,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@928ff8c822d966a999092a6a35e32177899afb7c # v2.24.6 + uses: github/codeql-action/upload-sarif@e56cfd0877b4826be144d11aa31e6c64a55828e9 # v2.24.7 with: sarif_file: results.sarif From f1c2825eb2e87236f29a234d191bb7c6a22ddba6 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Fri, 15 Mar 2024 15:08:12 +1100 Subject: [PATCH 11/56] Set up second Cloud Run backend for batch queries (part 1) (#2057) Make a duplicate Cloud Run API backend with no concurrent requests for processing batch queries. Don't route traffic to it yet - the traffic routing is controlled by terraform which is run before Cloud Deploy and we don't want it to completely take down our batch queries if something goes wrong. --- deployment/clouddeploy/osv-api/run-batch.yaml | 26 +++++++++++++++++++ deployment/clouddeploy/osv-api/skaffold.yaml | 2 ++ deployment/terraform/modules/osv/osv_api.tf | 23 ++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 deployment/clouddeploy/osv-api/run-batch.yaml diff --git a/deployment/clouddeploy/osv-api/run-batch.yaml b/deployment/clouddeploy/osv-api/run-batch.yaml new file mode 100644 index 00000000000..76d6479b5d2 --- /dev/null +++ b/deployment/clouddeploy/osv-api/run-batch.yaml @@ -0,0 +1,26 @@ +apiVersion: serving.knative.dev/v1 +kind: Service +metadata: + name: osv-grpc-backend-batch +spec: + template: + metadata: + annotations: + autoscaling.knative.dev/maxScale: '100' + spec: + containers: + - image: osv-server + resources: + limits: + memory: 4Gi + startupProbe: + grpc: + service: osv.v1.OSV + livenessProbe: + grpc: + service: osv.v1.OSV + timeoutSeconds: 5 + failureThreshold: 3 + periodSeconds: 10 + timeoutSeconds: 60 + containerConcurrency: 1 diff --git a/deployment/clouddeploy/osv-api/skaffold.yaml b/deployment/clouddeploy/osv-api/skaffold.yaml index 1290f0b6179..193dcf3cc12 100644 --- a/deployment/clouddeploy/osv-api/skaffold.yaml +++ b/deployment/clouddeploy/osv-api/skaffold.yaml @@ -9,11 +9,13 @@ profiles: manifests: rawYaml: - run.yaml + - run-batch.yaml - name: prod manifests: rawYaml: - run.yaml + - run-batch.yaml deploy: cloudrun: {} diff --git a/deployment/terraform/modules/osv/osv_api.tf b/deployment/terraform/modules/osv/osv_api.tf index f6b0bcd16c1..46bceadb009 100644 --- a/deployment/terraform/modules/osv/osv_api.tf +++ b/deployment/terraform/modules/osv/osv_api.tf @@ -29,6 +29,29 @@ resource "google_cloud_run_service" "api_backend" { } } +resource "google_cloud_run_v2_service" "api_backend_batch" { + project = var.project_id + name = "osv-grpc-backend-batch" + location = "us-central1" + + template { + containers { + image = "us-docker.pkg.dev/cloudrun/container/hello:latest" # Placeholder image. + } + } + + lifecycle { + ignore_changes = [ + # To be managed by Cloud Deploy. + template, + traffic, + labels, + client + ] + prevent_destroy = true + } +} + variable "_api_descriptor_file" { # This isn't actually sensitive, but it's outputted as a massive base64 string which really floods the plan output. sensitive = true From 99c4a362ea5644642e12bb3870dad4335f7d6b72 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Fri, 15 Mar 2024 16:17:06 +1100 Subject: [PATCH 12/56] Fix Cloud Deploy to use multi target (#2058) You're not allowed to deploy two Cloud Run services in one target. Changed Cloud Deploy to use [multiple targets](https://cloud.google.com/deploy/docs/deploy-app-parallel) I applied the Cloud Deploy pipeline change already and it kind of clobbered our ability to roll back to before this change :grimacing: (but the release history is still there so that's something...) --- .../clouddeploy/osv-api/clouddeploy.yaml | 56 ++++++++++++++++++- deployment/clouddeploy/osv-api/run-batch.yaml | 26 --------- deployment/clouddeploy/osv-api/run.yaml | 4 +- deployment/clouddeploy/osv-api/skaffold.yaml | 2 - deployment/deploy-prod.yaml | 2 +- 5 files changed, 57 insertions(+), 33 deletions(-) delete mode 100644 deployment/clouddeploy/osv-api/run-batch.yaml diff --git a/deployment/clouddeploy/osv-api/clouddeploy.yaml b/deployment/clouddeploy/osv-api/clouddeploy.yaml index 2045cb4959e..5ab611857b6 100644 --- a/deployment/clouddeploy/osv-api/clouddeploy.yaml +++ b/deployment/clouddeploy/osv-api/clouddeploy.yaml @@ -5,12 +5,21 @@ metadata: description: OSV API pipeline serialPipeline: stages: - - targetId: staging-api + - targetId: staging-api-multi profiles: [ staging ] - - targetId: production-api + - targetId: production-api-multi profiles: [ prod ] --- +apiVersion: deploy.cloud.google.com/v1 +kind: Target +metadata: + name: staging-api-multi +description: multi-target oss-vdb-test API instances +multiTarget: + targetIds: [staging-api, staging-api-batch] +--- + apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: @@ -25,6 +34,32 @@ executionConfigs: serviceAccount: deployment@oss-vdb.iam.gserviceaccount.com --- +apiVersion: deploy.cloud.google.com/v1 +kind: Target +metadata: + name: staging-api-batch +description: oss-vdb-test API batch query instance +run: + location: projects/oss-vdb-test/locations/us-central1 +deployParameters: + serviceName: "osv-grpc-backend-batch" + containerConcurrency: "1" +executionConfigs: +- usages: + - RENDER + - DEPLOY + serviceAccount: deployment@oss-vdb.iam.gserviceaccount.com +--- + +apiVersion: deploy.cloud.google.com/v1 +kind: Target +metadata: + name: production-api-multi +description: multi-target oss-vdb API instances +multiTarget: + targetIds: [production-api, production-api-batch] +--- + apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: @@ -37,3 +72,20 @@ executionConfigs: - RENDER - DEPLOY serviceAccount: deployment@oss-vdb.iam.gserviceaccount.com +--- + +apiVersion: deploy.cloud.google.com/v1 +kind: Target +metadata: + name: production-api-batch +description: oss-vdb API batch query instance +run: + location: projects/oss-vdb/locations/us-central1 +deployParameters: + serviceName: "osv-grpc-backend-batch" + containerConcurrency: "1" +executionConfigs: +- usages: + - RENDER + - DEPLOY + serviceAccount: deployment@oss-vdb.iam.gserviceaccount.com diff --git a/deployment/clouddeploy/osv-api/run-batch.yaml b/deployment/clouddeploy/osv-api/run-batch.yaml deleted file mode 100644 index 76d6479b5d2..00000000000 --- a/deployment/clouddeploy/osv-api/run-batch.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: serving.knative.dev/v1 -kind: Service -metadata: - name: osv-grpc-backend-batch -spec: - template: - metadata: - annotations: - autoscaling.knative.dev/maxScale: '100' - spec: - containers: - - image: osv-server - resources: - limits: - memory: 4Gi - startupProbe: - grpc: - service: osv.v1.OSV - livenessProbe: - grpc: - service: osv.v1.OSV - timeoutSeconds: 5 - failureThreshold: 3 - periodSeconds: 10 - timeoutSeconds: 60 - containerConcurrency: 1 diff --git a/deployment/clouddeploy/osv-api/run.yaml b/deployment/clouddeploy/osv-api/run.yaml index 7841c6b18af..c5808229476 100644 --- a/deployment/clouddeploy/osv-api/run.yaml +++ b/deployment/clouddeploy/osv-api/run.yaml @@ -1,7 +1,7 @@ apiVersion: serving.knative.dev/v1 kind: Service metadata: - name: osv-grpc-backend + name: osv-grpc-backend # from-param: ${serviceName} spec: template: metadata: @@ -23,4 +23,4 @@ spec: failureThreshold: 3 periodSeconds: 10 timeoutSeconds: 60 - containerConcurrency: 5 + containerConcurrency: 5 # from-param: ${containerConcurrency} diff --git a/deployment/clouddeploy/osv-api/skaffold.yaml b/deployment/clouddeploy/osv-api/skaffold.yaml index 193dcf3cc12..1290f0b6179 100644 --- a/deployment/clouddeploy/osv-api/skaffold.yaml +++ b/deployment/clouddeploy/osv-api/skaffold.yaml @@ -9,13 +9,11 @@ profiles: manifests: rawYaml: - run.yaml - - run-batch.yaml - name: prod manifests: rawYaml: - run.yaml - - run-batch.yaml deploy: cloudrun: {} diff --git a/deployment/deploy-prod.yaml b/deployment/deploy-prod.yaml index 7c2fe0541d9..7d789397abc 100644 --- a/deployment/deploy-prod.yaml +++ b/deployment/deploy-prod.yaml @@ -21,7 +21,7 @@ steps: - name: gcr.io/cloud-builders/gcloud args: ['deploy', 'releases', 'promote', '--quiet', '--release=osv-$SHORT_SHA', '--region=us-central1', '--delivery-pipeline=gke-workers', '--to-target=production-workers', '--annotations=tag=$TAG_NAME'] - name: gcr.io/cloud-builders/gcloud - args: ['deploy', 'releases', 'promote', '--quiet', '--release=osv-$SHORT_SHA', '--region=us-central1', '--delivery-pipeline=osv-api', '--to-target=production-api', '--annotations=tag=$TAG_NAME'] + args: ['deploy', 'releases', 'promote', '--quiet', '--release=osv-$SHORT_SHA', '--region=us-central1', '--delivery-pipeline=osv-api', '--to-target=production-api-multi', '--annotations=tag=$TAG_NAME'] - name: gcr.io/cloud-builders/gcloud args: ['deploy', 'releases', 'promote', '--quiet', '--release=osv-$SHORT_SHA', '--region=us-central1', '--delivery-pipeline=gke-indexer', '--to-target=production-indexer', '--annotations=tag=$TAG_NAME'] From 7fb60389abc65c0eefeec67246b3bc7d7d455dc1 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Mon, 18 Mar 2024 10:03:05 +1100 Subject: [PATCH 13/56] Add trace to API logs (#2055) Adds the trace fields to most of the logs produced by the API, so it's easier correlate the logs to their requests. Relevant links: https://cloud.google.com/trace/docs/setup#force-trace https://cloud.google.com/logging/docs/agent/logging/configuration#special-fields --------- Co-authored-by: Rex P <106129829+another-rex@users.noreply.github.com> --- gcp/api/server.py | 51 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/gcp/api/server.py b/gcp/api/server.py index fa3290a0d47..f9ba9f11896 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -102,6 +102,33 @@ def wrapper(*args, **kwargs): return wrapper +def trace_log_fields(context: grpc.ServicerContext) -> dict: + """Makes the json_field needed to associate a log with the request trace.""" + fields = {} + trace_context = dict( + context.invocation_metadata()).get('x-cloud-trace-context') + if trace_context is None: + return fields + + # Trace context header example: + # "X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=TRACE_TRUE" + parts = trace_context.split('/') + trace_id = parts[0] + # We don't set the GOOGLE_CLOUD_PROJECT env var explicitly, and I can't find + # any confirmation on whether Cloud Run will set automatically. + # Grab the project name from the (undocumented?) field on ndb.Client(). + # The most correct way to do this would be to use the instance metadata server + # https://cloud.google.com/run/docs/container-contract#metadata-server + project = getattr(_ndb_client, 'project', 'oss-vdb') # fall back to oss-vdb + fields[ + 'logging.googleapis.com/trace'] = f'projects/{project}/traces/{trace_id}' + if len(parts) > 1: + span_id = parts[1].split(';')[0] + fields['logging.googleapis.com/spanId'] = span_id + + return fields + + class OSVServicer(osv_service_v1_pb2_grpc.OSVServicer, health_pb2_grpc.HealthServicer): """V1 OSV servicer.""" @@ -128,6 +155,7 @@ def QueryAffected(self, request, context: grpc.ServicerContext): """ # Log some information about the query with structured logging + logging_trace = trace_log_fields(context) qtype, ecosystem, versioned = query_info(request.query) if ecosystem is not None: logging.info( @@ -139,18 +167,20 @@ def QueryAffected(self, request, context: grpc.ServicerContext): 'details': { 'ecosystem': ecosystem, 'versioned': versioned == 'versioned' - } + }, + **trace_log_fields(context) } }) else: - logging.info('QueryAffected for %s', qtype) + logging.info( + 'QueryAffected for %s', qtype, extra={'json_fields': logging_trace}) page_token = None if request.query.page_token: try: page_token = ndb.Cursor(urlsafe=request.query.page_token) except ValueError as e: - logging.warning(e) + logging.warning(e, extra={'json_fields': logging_trace}) context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Invalid page token.') query_context = QueryContext( @@ -182,6 +212,7 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): batch_results = [] futures = [] + logging_trace = trace_log_fields(context) # Log some information about the query with structured logging e.g. # "message": "QueryAffectedBatch with 15 queries", # "details": { @@ -223,7 +254,8 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): 'QueryAffectedBatch with %d queries', len(request.query.queries), extra={'json_fields': { - 'details': query_details + 'details': query_details, + **logging_trace }}) if len(request.query.queries) > _MAX_BATCH_QUERY: @@ -238,7 +270,7 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): try: page_token = ndb.Cursor(urlsafe=query.page_token) except ValueError as e: - logging.warning(e) + logging.warning(e, extra={'json_fields': logging_trace}) context.abort(grpc.StatusCode.INVALID_ARGUMENT, f'Invalid page token at index: {i}.') query_context = QueryContext( @@ -678,7 +710,10 @@ def to_response(b): if next_page_token: next_page_token = next_page_token.urlsafe() - logging.warning('Page size limit hit, response size: %s', len(bugs)) + logging.warning( + 'Page size limit hit, response size: %s', + len(bugs), + extra={'json_fields': trace_log_fields(context.service_context)}) return bugs, next_page_token @@ -1022,7 +1057,9 @@ def query_by_version(context: QueryContext, context, query, package_name, ecosystem, purl, version) else: - logging.warning("Package query without ecosystem specified") + logging.warning( + "Package query without ecosystem specified", + extra={'json_fields': trace_log_fields(context.service_context)}) # Unspecified ecosystem. Try semver first. # TODO: Remove after testing how many consumers are From 68b21e992b514b7044594fbfdaf86053dde5a936 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Mon, 18 Mar 2024 13:03:04 +1100 Subject: [PATCH 14/56] Maybe fix api log trace (#2063) #2055 didn't seem to work, experimenting with putting the trace fields in the base `extra` dict, rather than in `json_fields` --- gcp/api/server.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/gcp/api/server.py b/gcp/api/server.py index f9ba9f11896..93e5d6e4996 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -167,20 +167,19 @@ def QueryAffected(self, request, context: grpc.ServicerContext): 'details': { 'ecosystem': ecosystem, 'versioned': versioned == 'versioned' - }, - **trace_log_fields(context) - } + } + }, + **logging_trace }) else: - logging.info( - 'QueryAffected for %s', qtype, extra={'json_fields': logging_trace}) + logging.info('QueryAffected for %s', qtype, extra=logging_trace) page_token = None if request.query.page_token: try: page_token = ndb.Cursor(urlsafe=request.query.page_token) except ValueError as e: - logging.warning(e, extra={'json_fields': logging_trace}) + logging.warning(e, extra=logging_trace) context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Invalid page token.') query_context = QueryContext( @@ -253,10 +252,12 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): logging.info( 'QueryAffectedBatch with %d queries', len(request.query.queries), - extra={'json_fields': { - 'details': query_details, + extra={ + 'json_fields': { + 'details': query_details + }, **logging_trace - }}) + }) if len(request.query.queries) > _MAX_BATCH_QUERY: context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Too many queries.') @@ -270,7 +271,7 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): try: page_token = ndb.Cursor(urlsafe=query.page_token) except ValueError as e: - logging.warning(e, extra={'json_fields': logging_trace}) + logging.warning(e, extra=logging_trace) context.abort(grpc.StatusCode.INVALID_ARGUMENT, f'Invalid page token at index: {i}.') query_context = QueryContext( @@ -713,7 +714,7 @@ def to_response(b): logging.warning( 'Page size limit hit, response size: %s', len(bugs), - extra={'json_fields': trace_log_fields(context.service_context)}) + extra=trace_log_fields(context.service_context)) return bugs, next_page_token @@ -1059,7 +1060,7 @@ def query_by_version(context: QueryContext, else: logging.warning( "Package query without ecosystem specified", - extra={'json_fields': trace_log_fields(context.service_context)}) + extra=trace_log_fields(context.service_context)) # Unspecified ecosystem. Try semver first. # TODO: Remove after testing how many consumers are From 67f1b39c7aeee2a28ce5a41cabe113e4b49feb7c Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Mon, 18 Mar 2024 15:07:06 +1100 Subject: [PATCH 15/56] Another attempt to fix logging traces (#2064) Hopefully this one works... --- gcp/api/server.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gcp/api/server.py b/gcp/api/server.py index 93e5d6e4996..a54e9a1ff70 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -120,11 +120,10 @@ def trace_log_fields(context: grpc.ServicerContext) -> dict: # The most correct way to do this would be to use the instance metadata server # https://cloud.google.com/run/docs/container-contract#metadata-server project = getattr(_ndb_client, 'project', 'oss-vdb') # fall back to oss-vdb - fields[ - 'logging.googleapis.com/trace'] = f'projects/{project}/traces/{trace_id}' + fields['trace'] = f'projects/{project}/traces/{trace_id}' if len(parts) > 1: span_id = parts[1].split(';')[0] - fields['logging.googleapis.com/spanId'] = span_id + fields['span_id'] = span_id return fields From f658b6d784ff90027fd2ff4c65990e080df1f527 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Tue, 19 Mar 2024 10:14:00 +1100 Subject: [PATCH 16/56] Set up second Cloud Run backend for batch queries (part 2) (#2066) Merge this after #2057 / #2058 has been released. Route batch query traffic to the new Cloud Run service. --- .../terraform/environments/oss-vdb-test/api/api_config.tftpl | 3 +++ .../terraform/environments/oss-vdb/api/api_config.tftpl | 3 +++ deployment/terraform/modules/osv/osv_api.tf | 5 +++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/deployment/terraform/environments/oss-vdb-test/api/api_config.tftpl b/deployment/terraform/environments/oss-vdb-test/api/api_config.tftpl index 83199e3f873..0646496d0df 100644 --- a/deployment/terraform/environments/oss-vdb-test/api/api_config.tftpl +++ b/deployment/terraform/environments/oss-vdb-test/api/api_config.tftpl @@ -31,3 +31,6 @@ backend: - selector: "*" address: ${backend_url} deadline: 60 + - selector: "osv.v1.OSV.QueryAffectedBatch" + address: ${backend_batch_url} + deadline: 60 diff --git a/deployment/terraform/environments/oss-vdb/api/api_config.tftpl b/deployment/terraform/environments/oss-vdb/api/api_config.tftpl index 441d79d5666..1f898c06412 100644 --- a/deployment/terraform/environments/oss-vdb/api/api_config.tftpl +++ b/deployment/terraform/environments/oss-vdb/api/api_config.tftpl @@ -31,6 +31,9 @@ backend: - selector: "*" address: ${backend_url} deadline: 60 + - selector: "osv.v1.OSV.QueryAffectedBatch" + address: ${backend_batch_url} + deadline: 60 documentation: summary: > OSV is a vulnerability database for open source projects. It exposes an API diff --git a/deployment/terraform/modules/osv/osv_api.tf b/deployment/terraform/modules/osv/osv_api.tf index 46bceadb009..5b206aaba0d 100644 --- a/deployment/terraform/modules/osv/osv_api.tf +++ b/deployment/terraform/modules/osv/osv_api.tf @@ -65,8 +65,9 @@ resource "google_endpoints_service" "grpc_service" { grpc_config = templatefile( "api/api_config.tftpl", { - service_name = var.api_url, - backend_url = replace(google_cloud_run_service.api_backend.status[0].url, "https://", "grpcs://") + service_name = var.api_url, + backend_url = replace(google_cloud_run_service.api_backend.status[0].url, "https://", "grpcs://") + backend_batch_url = replace(google_cloud_run_v2_service.api_backend_batch.uri, "https://", "grpcs://") }) protoc_output_base64 = filebase64(var._api_descriptor_file) } From 70da8e88c1da667a3cc698973cf2d1339daadb14 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Thu, 21 Mar 2024 09:44:04 +1100 Subject: [PATCH 17/56] Add traces to logs through `logging.Filter` (#2067) Added a new class/decorator to automatically insert traces into logs in API. Re: https://github.com/google/osv.dev/pull/2055#pullrequestreview-1941604353 --- gcp/api/server.py | 101 +++++++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/gcp/api/server.py b/gcp/api/server.py index a54e9a1ff70..07368749fa4 100644 --- a/gcp/api/server.py +++ b/gcp/api/server.py @@ -22,6 +22,7 @@ import functools import logging import os +import threading import time from typing import Callable, List @@ -102,30 +103,47 @@ def wrapper(*args, **kwargs): return wrapper -def trace_log_fields(context: grpc.ServicerContext) -> dict: - """Makes the json_field needed to associate a log with the request trace.""" - fields = {} - trace_context = dict( - context.invocation_metadata()).get('x-cloud-trace-context') - if trace_context is None: - return fields - - # Trace context header example: - # "X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=TRACE_TRUE" - parts = trace_context.split('/') - trace_id = parts[0] - # We don't set the GOOGLE_CLOUD_PROJECT env var explicitly, and I can't find - # any confirmation on whether Cloud Run will set automatically. - # Grab the project name from the (undocumented?) field on ndb.Client(). - # The most correct way to do this would be to use the instance metadata server - # https://cloud.google.com/run/docs/container-contract#metadata-server - project = getattr(_ndb_client, 'project', 'oss-vdb') # fall back to oss-vdb - fields['trace'] = f'projects/{project}/traces/{trace_id}' - if len(parts) > 1: - span_id = parts[1].split(';')[0] - fields['span_id'] = span_id - - return fields +class LogTraceFilter: + """Class for adding the trace information from the grpc requests into logs.""" + + def __init__(self): + self.thread_local = threading.local() + + def log_trace(self, func): + """Wrapper for grpc method to capture trace from header metadata""" + + @functools.wraps(func) + def wrapper(s, r, context: grpc.ServicerContext): + self.thread_local.trace = dict( + context.invocation_metadata()).get('x-cloud-trace-context') + return func(s, r, context) + + return wrapper + + def filter(self, record: logging.LogRecord) -> bool: + """logging.Filter method to add trace into log data.""" + trace = getattr(self.thread_local, 'trace', None) + if not trace: + return True + + # Trace context header example: + # "X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=TRACE_TRUE" + parts = trace.split('/') + trace_id = parts[0] + # We don't set the GOOGLE_CLOUD_PROJECT env var explicitly, and I can't find + # any confirmation on whether Cloud Run will set automatically. + # Grab the project name from the (undocumented?) field on ndb.Client(). + # Most correct way to do this would be to use the instance metadata server + # https://cloud.google.com/run/docs/container-contract#metadata-server + project = getattr(_ndb_client, 'project', 'oss-vdb') # fall back to oss-vdb + record.trace = f'projects/{project}/traces/{trace_id}' + if len(parts) > 1: + record.span_id = parts[1].split(';')[0] + + return True + + +trace_filter = LogTraceFilter() class OSVServicer(osv_service_v1_pb2_grpc.OSVServicer, @@ -133,6 +151,7 @@ class OSVServicer(osv_service_v1_pb2_grpc.OSVServicer, """V1 OSV servicer.""" @ndb_context + @trace_filter.log_trace def GetVulnById(self, request, context: grpc.ServicerContext): """Return a `Vulnerability` object for a given OSV ID.""" bug: osv.Bug = osv.Bug.get_by_id(request.id) @@ -147,14 +166,13 @@ def GetVulnById(self, request, context: grpc.ServicerContext): return bug_to_response(bug, include_alias=True) @ndb_context + @trace_filter.log_trace def QueryAffected(self, request, context: grpc.ServicerContext): """Query vulnerabilities for a particular project at a given commit or version. """ - # Log some information about the query with structured logging - logging_trace = trace_log_fields(context) qtype, ecosystem, versioned = query_info(request.query) if ecosystem is not None: logging.info( @@ -167,18 +185,17 @@ def QueryAffected(self, request, context: grpc.ServicerContext): 'ecosystem': ecosystem, 'versioned': versioned == 'versioned' } - }, - **logging_trace + } }) else: - logging.info('QueryAffected for %s', qtype, extra=logging_trace) + logging.info('QueryAffected for %s', qtype) page_token = None if request.query.page_token: try: page_token = ndb.Cursor(urlsafe=request.query.page_token) except ValueError as e: - logging.warning(e, extra=logging_trace) + logging.warning(e) context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Invalid page token.') query_context = QueryContext( @@ -205,12 +222,12 @@ def QueryAffected(self, request, context: grpc.ServicerContext): return None @ndb_context + @trace_filter.log_trace def QueryAffectedBatch(self, request, context: grpc.ServicerContext): """Query vulnerabilities (batch).""" batch_results = [] futures = [] - logging_trace = trace_log_fields(context) # Log some information about the query with structured logging e.g. # "message": "QueryAffectedBatch with 15 queries", # "details": { @@ -251,12 +268,9 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): logging.info( 'QueryAffectedBatch with %d queries', len(request.query.queries), - extra={ - 'json_fields': { - 'details': query_details - }, - **logging_trace - }) + extra={'json_fields': { + 'details': query_details + }}) if len(request.query.queries) > _MAX_BATCH_QUERY: context.abort(grpc.StatusCode.INVALID_ARGUMENT, 'Too many queries.') @@ -270,7 +284,7 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): try: page_token = ndb.Cursor(urlsafe=query.page_token) except ValueError as e: - logging.warning(e, extra=logging_trace) + logging.warning(e) context.abort(grpc.StatusCode.INVALID_ARGUMENT, f'Invalid page token at index: {i}.') query_context = QueryContext( @@ -300,6 +314,7 @@ def QueryAffectedBatch(self, request, context: grpc.ServicerContext): return osv_service_v1_pb2.BatchVulnerabilityList(results=batch_results) @ndb_context + @trace_filter.log_trace def DetermineVersion(self, request, context: grpc.ServicerContext): """Determine the version of the provided hashes.""" res = determine_version(request.query, context).result() @@ -710,10 +725,7 @@ def to_response(b): if next_page_token: next_page_token = next_page_token.urlsafe() - logging.warning( - 'Page size limit hit, response size: %s', - len(bugs), - extra=trace_log_fields(context.service_context)) + logging.warning('Page size limit hit, response size: %s', len(bugs)) return bugs, next_page_token @@ -1057,9 +1069,7 @@ def query_by_version(context: QueryContext, context, query, package_name, ecosystem, purl, version) else: - logging.warning( - "Package query without ecosystem specified", - extra=trace_log_fields(context.service_context)) + logging.warning("Package query without ecosystem specified") # Unspecified ecosystem. Try semver first. # TODO: Remove after testing how many consumers are @@ -1172,6 +1182,7 @@ def main(): """Entrypoint.""" if is_cloud_run(): setup_gcp_logging('api-backend') + logging.getLogger().addFilter(trace_filter) logging.getLogger().setLevel(logging.INFO) From d382eda48cb16bcdcee50d1da70a4d48ef3b1d8a Mon Sep 17 00:00:00 2001 From: Jess Lowe <86962800+jess-lowe@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:47:21 +1300 Subject: [PATCH 18/56] Added 'Docs' link to osv.dev documentation (#2070) Closes #2042 May need to be tested by someone with access to appengine :) --- gcp/appengine/frontend3/src/base.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gcp/appengine/frontend3/src/base.html b/gcp/appengine/frontend3/src/base.html index 450877eca9f..34103bab5bf 100644 --- a/gcp/appengine/frontend3/src/base.html +++ b/gcp/appengine/frontend3/src/base.html @@ -51,7 +51,10 @@ - + +
  • @@ -68,4 +71,4 @@ rel="stylesheet"> - \ No newline at end of file + From d06dcba14ba481d83259db58b08429be7f83e227 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 10:36:01 +1100 Subject: [PATCH 19/56] chore(deps-dev): Bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /gcp/appengine/frontend3 (#2072) Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) from 5.3.3 to 5.3.4.
    Release notes

    Sourced from webpack-dev-middleware's releases.

    v5.3.4

    5.3.4 (2024-03-20)

    Bug Fixes

    • security: do not allow to read files above (#1779) (189c4ac)
    Changelog

    Sourced from webpack-dev-middleware's changelog.

    5.3.4 (2024-03-20)

    Bug Fixes

    • security: do not allow to read files above (#1779) (189c4ac)
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=webpack-dev-middleware&package-manager=npm_and_yarn&previous-version=5.3.3&new-version=5.3.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gcp/appengine/frontend3/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcp/appengine/frontend3/package-lock.json b/gcp/appengine/frontend3/package-lock.json index 989415ecfbb..f4118722587 100644 --- a/gcp/appengine/frontend3/package-lock.json +++ b/gcp/appengine/frontend3/package-lock.json @@ -5559,9 +5559,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "dependencies": { "colorette": "^2.0.10", From 89386e03eb0a37f4fff1f74eacd2b03d9a40d381 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 10:36:25 +1100 Subject: [PATCH 20/56] chore(deps-dev): Bump follow-redirects from 1.15.5 to 1.15.6 in /gcp/appengine/frontend3 (#2060) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.5 to 1.15.6.
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=follow-redirects&package-manager=npm_and_yarn&previous-version=1.15.5&new-version=1.15.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gcp/appengine/frontend3/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcp/appengine/frontend3/package-lock.json b/gcp/appengine/frontend3/package-lock.json index f4118722587..1ed380bc0f2 100644 --- a/gcp/appengine/frontend3/package-lock.json +++ b/gcp/appengine/frontend3/package-lock.json @@ -2731,9 +2731,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { From cfeb2bebcb1b49fc42f8d7e0d393df3facba257b Mon Sep 17 00:00:00 2001 From: Sarah Zakarias Date: Tue, 26 Mar 2024 00:29:22 +0100 Subject: [PATCH 21/56] Update pub package url to 'pub.dev' and not the Chinese mirror (#2069) --- osv/ecosystems/_ecosystems.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osv/ecosystems/_ecosystems.py b/osv/ecosystems/_ecosystems.py index aeb3728f028..a192dffa676 100644 --- a/osv/ecosystems/_ecosystems.py +++ b/osv/ecosystems/_ecosystems.py @@ -84,7 +84,7 @@ 'npm': 'https://www.npmjs.com/package/', 'NuGet': 'https://www.nuget.org/packages/', 'Packagist': 'https://packagist.org/packages/', - 'Pub': 'https://pub-web.flutter-io.cn/packages/', + 'Pub': 'https://pub.dev/packages/', 'PyPI': 'https://pypi.org/project/', 'Rocky Linux': 'https://pkgs.org/download/', 'RubyGems': 'https://rubygems.org/gems/', From 52136b5f1d38e09a5c687bd796feaa54fda7e4fa Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Tue, 26 Mar 2024 11:45:46 +1100 Subject: [PATCH 22/56] Relock package-lock.json (#2079) Should fix the vulnerability we've been seeing on express. Used guided remediation to do this :slightly_smiling_face: --- gcp/appengine/frontend3/package-lock.json | 267 +++++++++++----------- 1 file changed, 135 insertions(+), 132 deletions(-) diff --git a/gcp/appengine/frontend3/package-lock.json b/gcp/appengine/frontend3/package-lock.json index 1ed380bc0f2..f9c02c28924 100644 --- a/gcp/appengine/frontend3/package-lock.json +++ b/gcp/appengine/frontend3/package-lock.json @@ -64,14 +64,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", - "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -87,22 +87,22 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -112,9 +112,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", - "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1126,9 +1126,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, "node_modules/@types/body-parser": { @@ -1170,9 +1170,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", - "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", + "version": "8.56.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", + "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1253,9 +1253,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", - "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1271,9 +1271,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", "dev": true }, "node_modules/@types/range-parser": { @@ -1342,9 +1342,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -1364,9 +1364,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -1387,15 +1387,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -1423,28 +1423,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -1452,24 +1452,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -1478,12 +1478,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -1697,22 +1697,25 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -1720,7 +1723,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1853,9 +1856,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001589", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", - "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", "dev": true, "funding": [ { @@ -2043,9 +2046,9 @@ } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -2365,9 +2368,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.681", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz", - "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==", + "version": "1.4.716", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.716.tgz", + "integrity": "sha512-t/MXMzFKQC3UfMDpw7V5wdB/UAB8dWx4hEsy+fpPYJWW3gqh3u5T1uXp6vR+H6dGCPBxkRo+YBcapBLvbGQHRw==", "dev": true }, "node_modules/emojis-list": { @@ -2389,9 +2392,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -2444,9 +2447,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true }, "node_modules/escalade": { @@ -2567,17 +2570,17 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -2977,9 +2980,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -3040,9 +3043,9 @@ } }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -4097,9 +4100,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -4118,7 +4121,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -4184,9 +4187,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -4303,9 +4306,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -4817,17 +4820,17 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4882,12 +4885,12 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -4952,9 +4955,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5144,9 +5147,9 @@ } }, "node_modules/terser": { - "version": "5.28.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", - "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -5398,9 +5401,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", From 98f798681f48eaf4bd0b2327d7e0857ade573b20 Mon Sep 17 00:00:00 2001 From: Kishor Bhat Date: Tue, 26 Mar 2024 17:07:51 -0700 Subject: [PATCH 23/56] Fix API links in FAQ page (#2077) The links to the API page on the current FAQ page go to https://google.github.io/osv.dev/faq/api/, which is 404. This change fixes that behavior by going up a folder. Tested: built and verified change by following https://github.com/google/osv.dev/blob/master/CONTRIBUTING.md#contributing-documentation --- docs/faq.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 394c6b57c5b..dacbc68326f 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -36,7 +36,7 @@ See our blog posts for more details: The OSV schema and OSV.dev can be used by both: -1. Open source consumers: By querying [OSV.dev's API](./api/) and using our tooling to find known vulnerabilities in their dependencies. +1. Open source consumers: By querying [OSV.dev's API](../api/) and using our tooling to find known vulnerabilities in their dependencies. 2. Vulnerability database producers: By making the database available in the OSV format. ## Why a new format to describe vulnerability? @@ -66,7 +66,7 @@ present (but empty) in the [data exports](#is-the-database-available-to-download ## How do I use OSV as an open source user? -OSV.dev provides an [easy-to-use API](./api/) for querying against the aggregated database of vulnerabilities. +OSV.dev provides an [easy-to-use API](../api/) for querying against the aggregated database of vulnerabilities. [Command line tooling](https://github.com/google/osv-scanner) is also available for vulnerability scanning of SBOMs, language manifests, and container images. @@ -130,4 +130,4 @@ For sources that are a Git repository, the `Import Source` field points to the authoritative source of the data, and you may be able to create a pull/merge request or file an issue against the repository. -If you are not able to get satisfaction after dealing directly with the source of the data, please [file an issue](https://github.com/google/osv.dev/issues?q=is%3Aissue+is%3Aopen+label%3A%22data+quality%22) tagged with `data quality`. \ No newline at end of file +If you are not able to get satisfaction after dealing directly with the source of the data, please [file an issue](https://github.com/google/osv.dev/issues?q=is%3Aissue+is%3Aopen+label%3A%22data+quality%22) tagged with `data quality`. From 86bc8bd39e1e45ecedfededdece9df134b3bc29b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 27 Mar 2024 07:00:00 +0100 Subject: [PATCH 24/56] chore(deps): lock file maintenance api (#2074) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | | | lockFileMaintenance | All locks refreshed | | | | | | google-cloud-logging | packages | minor | `==3.9.0` -> `==3.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-logging/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-logging/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-logging/3.9.0/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-logging/3.9.0/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | google-cloud-ndb | packages | patch | `==2.3.0` -> `==2.3.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-ndb/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-ndb/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-ndb/2.3.0/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-ndb/2.3.0/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | google-cloud-pubsub | packages | minor | `==2.19.7` -> `==2.21.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-pubsub/2.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-pubsub/2.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-pubsub/2.19.7/2.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-pubsub/2.19.7/2.21.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | grpcio | packages | patch | `==1.62.0` -> `==1.62.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/grpcio/1.62.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/grpcio/1.62.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/grpcio/1.62.0/1.62.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/grpcio/1.62.0/1.62.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | packageurl-python | packages | minor | `==0.14.0` -> `==0.15.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/packageurl-python/0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/packageurl-python/0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/packageurl-python/0.14.0/0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packageurl-python/0.14.0/0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- gcp/api/Pipfile | 10 +- gcp/api/Pipfile.lock | 438 +++++++++++++++++++++---------------------- 2 files changed, 216 insertions(+), 232 deletions(-) diff --git a/gcp/api/Pipfile b/gcp/api/Pipfile index 46c5dfa6744..bedc1ecc6c4 100644 --- a/gcp/api/Pipfile +++ b/gcp/api/Pipfile @@ -4,12 +4,12 @@ verify_ssl = true name = "pypi" [packages] -google-cloud-ndb = "==2.3.0" -google-cloud-logging = "==3.9.0" -google-cloud-pubsub = "==2.19.7" -grpcio = "==1.62.0" +google-cloud-ndb = "==2.3.1" +google-cloud-logging = "==3.10.0" +google-cloud-pubsub = "==2.21.0" +grpcio = "==1.62.1" osv = {editable = true, path = "../../"} -packageurl-python = "==0.14.0" +packageurl-python = "==0.15.0" packaging = "==20.9" requests = "==2.31.0" grpcio-reflection = "*" diff --git a/gcp/api/Pipfile.lock b/gcp/api/Pipfile.lock index 0d024968ef3..ea4d737e7e9 100644 --- a/gcp/api/Pipfile.lock +++ b/gcp/api/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "4a2dce8ca64f7007ba64d6153538ade61678746302c6fa45447eba1605849904" + "sha256": "40444362460f69410bf747a3dc339d56df806c641b50b0c57c371a9b352a27b0" }, "pipfile-spec": 6, "requires": { @@ -16,14 +16,6 @@ ] }, "default": { - "async-timeout": { - "hashes": [ - "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", - "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" - ], - "markers": "python_version >= '3.7'", - "version": "==4.0.3" - }, "attrs": { "hashes": [ "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", @@ -207,27 +199,27 @@ "grpc" ], "hashes": [ - "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e", - "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95" + "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6", + "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9" ], "markers": "python_version >= '3.7'", - "version": "==2.17.1" + "version": "==2.18.0" }, "google-auth": { "hashes": [ - "sha256:25141e2d7a14bfcba945f5e9827f98092716e99482562f15306e5b026e21aa72", - "sha256:34fc3046c257cedcf1622fc4b31fc2be7923d9b4d44973d481125ecc50d83885" + "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360", + "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415" ], "markers": "python_version >= '3.7'", - "version": "==2.28.1" + "version": "==2.29.0" }, "google-cloud-appengine-logging": { "hashes": [ - "sha256:08d46bacf7e6bb4cb963dc5c0ab6995f2cd3fec69c7a2862405e98dce0c194bc", - "sha256:134de64a84017cfe26a4b3a325bcc9b4a2dba05f9c9d3902ee24b4b1fa3e28af" + "sha256:8e30af51d853f219caf29e8b8b342b9ce8214b29f334dafae38d39aaaff7d372", + "sha256:fb504e6199fe8de85baa9d31cecf6776877851fe58867de603317ec7cc739987" ], "markers": "python_version >= '3.7'", - "version": "==1.4.2" + "version": "==1.4.3" }, "google-cloud-audit-log": { "hashes": [ @@ -255,41 +247,41 @@ }, "google-cloud-logging": { "hashes": [ - "sha256:094a2db068ff7f38c9e0c1017673fa49c0768fbae02769e03e06baa30f138b87", - "sha256:4decb1b0bed4a0e3c0e58a376646e6002d6be7cad039e3466822e8665072ea33" + "sha256:132192beb45731130a2ffbcd4b2b5cbd87370e7dcfa7397ae4002154f542bd20", + "sha256:d93d347351240ddb14cfe201987a2d32cf9d7f478b8b2fabed3015b425b3274f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==3.9.0" + "version": "==3.10.0" }, "google-cloud-ndb": { "hashes": [ - "sha256:04a7c0950ac1ad867af66b57c344ff067dd6ecef3ff8f244a70ce9d1991c1dd8", - "sha256:135e0e7766b0b29be8dbcf68f294981057942654c94bcf7faa974677c4e6ab27" + "sha256:3d6c8866681dc280ad9f90a6f5b556d324e4b29173d0b63ddf6b8e19655fec1a", + "sha256:a6a2f6c58bd14febb92c0e569ca6a4e1d14c4a70935c28f3681e33c67402428f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.3.0" + "version": "==2.3.1" }, "google-cloud-pubsub": { "hashes": [ - "sha256:443cb58e2440729876f3b0d6046c30c7a873aeb247e5e17f161fe967c91b53fb", - "sha256:da5f1eb217c0727befa7c85b9b95e6a89b32b422d548c9cf9a1e029410270b87" + "sha256:94017f0bc9a85fa3f4d913f312e930a0fe21775bd68dde5c666e2f1b1addf811", + "sha256:fabd19e08faa1f70081b0e5ea003a3c031a1d2c1b798cf1be5ded2dbf1d1dbef" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.19.7" + "version": "==2.21.0" }, "googleapis-common-protos": { "extras": [ "grpc" ], "hashes": [ - "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07", - "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277" + "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e", + "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632" ], "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.63.0" }, "grpc-google-iam-v1": { "hashes": [ @@ -301,90 +293,90 @@ }, "grpcio": { "hashes": [ - "sha256:0b9179478b09ee22f4a36b40ca87ad43376acdccc816ce7c2193a9061bf35701", - "sha256:0d3dee701e48ee76b7d6fbbba18ba8bc142e5b231ef7d3d97065204702224e0e", - "sha256:0d7ae7fc7dbbf2d78d6323641ded767d9ec6d121aaf931ec4a5c50797b886532", - "sha256:0e97f37a3b7c89f9125b92d22e9c8323f4e76e7993ba7049b9f4ccbe8bae958a", - "sha256:136ffd79791b1eddda8d827b607a6285474ff8a1a5735c4947b58c481e5e4271", - "sha256:1bc8449084fe395575ed24809752e1dc4592bb70900a03ca42bf236ed5bf008f", - "sha256:1eda79574aec8ec4d00768dcb07daba60ed08ef32583b62b90bbf274b3c279f7", - "sha256:29cb592c4ce64a023712875368bcae13938c7f03e99f080407e20ffe0a9aa33b", - "sha256:2c1488b31a521fbba50ae86423f5306668d6f3a46d124f7819c603979fc538c4", - "sha256:2e84bfb2a734e4a234b116be208d6f0214e68dcf7804306f97962f93c22a1839", - "sha256:2f3d9a4d0abb57e5f49ed5039d3ed375826c2635751ab89dcc25932ff683bbb6", - "sha256:36df33080cd7897623feff57831eb83c98b84640b016ce443305977fac7566fb", - "sha256:38f69de9c28c1e7a8fd24e4af4264726637b72f27c2099eaea6e513e7142b47e", - "sha256:39cd45bd82a2e510e591ca2ddbe22352e8413378852ae814549c162cf3992a93", - "sha256:3fa15850a6aba230eed06b236287c50d65a98f05054a0f01ccedf8e1cc89d57f", - "sha256:4cd356211579043fce9f52acc861e519316fff93980a212c8109cca8f47366b6", - "sha256:56ca7ba0b51ed0de1646f1735154143dcbdf9ec2dbe8cc6645def299bb527ca1", - "sha256:5e709f7c8028ce0443bddc290fb9c967c1e0e9159ef7a030e8c21cac1feabd35", - "sha256:614c3ed234208e76991992342bab725f379cc81c7dd5035ee1de2f7e3f7a9842", - "sha256:62aa1659d8b6aad7329ede5d5b077e3d71bf488d85795db517118c390358d5f6", - "sha256:62ccb92f594d3d9fcd00064b149a0187c246b11e46ff1b7935191f169227f04c", - "sha256:662d3df5314ecde3184cf87ddd2c3a66095b3acbb2d57a8cada571747af03873", - "sha256:748496af9238ac78dcd98cce65421f1adce28c3979393e3609683fcd7f3880d7", - "sha256:77d48e5b1f8f4204889f1acf30bb57c30378e17c8d20df5acbe8029e985f735c", - "sha256:7a195531828b46ea9c4623c47e1dc45650fc7206f8a71825898dd4c9004b0928", - "sha256:7e1f51e2a460b7394670fdb615e26d31d3260015154ea4f1501a45047abe06c9", - "sha256:7eea57444a354ee217fda23f4b479a4cdfea35fb918ca0d8a0e73c271e52c09c", - "sha256:7f9d6c3223914abb51ac564dc9c3782d23ca445d2864321b9059d62d47144021", - "sha256:81531632f93fece32b2762247c4c169021177e58e725494f9a746ca62c83acaa", - "sha256:81d444e5e182be4c7856cd33a610154fe9ea1726bd071d07e7ba13fafd202e38", - "sha256:821a44bd63d0f04e33cf4ddf33c14cae176346486b0df08b41a6132b976de5fc", - "sha256:88f41f33da3840b4a9bbec68079096d4caf629e2c6ed3a72112159d570d98ebe", - "sha256:8aab8f90b2a41208c0a071ec39a6e5dbba16fd827455aaa070fec241624ccef8", - "sha256:921148f57c2e4b076af59a815467d399b7447f6e0ee10ef6d2601eb1e9c7f402", - "sha256:92cdb616be44c8ac23a57cce0243af0137a10aa82234f23cd46e69e115071388", - "sha256:95370c71b8c9062f9ea033a0867c4c73d6f0ff35113ebd2618171ec1f1e903e0", - "sha256:98d8f4eb91f1ce0735bf0b67c3b2a4fea68b52b2fd13dc4318583181f9219b4b", - "sha256:a33f2bfd8a58a02aab93f94f6c61279be0f48f99fcca20ebaee67576cd57307b", - "sha256:ab140a3542bbcea37162bdfc12ce0d47a3cda3f2d91b752a124cc9fe6776a9e2", - "sha256:b3d3d755cfa331d6090e13aac276d4a3fb828bf935449dc16c3d554bf366136b", - "sha256:b71c65427bf0ec6a8b48c68c17356cb9fbfc96b1130d20a07cb462f4e4dcdcd5", - "sha256:b7a6be562dd18e5d5bec146ae9537f20ae1253beb971c0164f1e8a2f5a27e829", - "sha256:bcff647e7fe25495e7719f779cc219bbb90b9e79fbd1ce5bda6aae2567f469f2", - "sha256:c912688acc05e4ff012c8891803659d6a8a8b5106f0f66e0aed3fb7e77898fa6", - "sha256:ce1aafdf8d3f58cb67664f42a617af0e34555fe955450d42c19e4a6ad41c84bd", - "sha256:d6a56ba703be6b6267bf19423d888600c3f574ac7c2cc5e6220af90662a4d6b0", - "sha256:e803e9b58d8f9b4ff0ea991611a8d51b31c68d2e24572cd1fe85e99e8cc1b4f8", - "sha256:eef1d16ac26c5325e7d39f5452ea98d6988c700c427c52cbc7ce3201e6d93334", - "sha256:f359d635ee9428f0294bea062bb60c478a8ddc44b0b6f8e1f42997e5dc12e2ee", - "sha256:f4c04fe33039b35b97c02d2901a164bbbb2f21fb9c4e2a45a959f0b044c3512c", - "sha256:f897b16190b46bc4d4aaf0a32a4b819d559a37a756d7c6b571e9562c360eed72", - "sha256:fbe0c20ce9a1cff75cfb828b21f08d0a1ca527b67f2443174af6626798a754a4", - "sha256:fc2836cb829895ee190813446dce63df67e6ed7b9bf76060262c55fcd097d270", - "sha256:fcc98cff4084467839d0a20d16abc2a76005f3d1b38062464d088c07f500d170" + "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", + "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", + "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", + "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", + "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", + "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", + "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", + "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", + "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", + "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", + "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", + "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", + "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", + "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", + "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", + "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", + "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", + "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", + "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", + "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", + "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", + "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", + "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", + "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", + "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", + "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", + "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", + "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", + "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", + "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", + "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", + "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", + "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", + "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", + "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", + "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", + "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", + "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", + "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", + "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", + "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", + "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", + "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", + "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", + "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", + "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", + "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", + "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", + "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", + "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", + "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", + "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", + "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", + "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.62.1" }, "grpcio-health-checking": { "hashes": [ - "sha256:7fc26304530fd8ac06ba4bedbdc194a563c55e218abff409cbaf1de71914937b", - "sha256:8836163002d0db6f6e80b498d806f3472529da809ec553e073b19b9a156a4964" + "sha256:9ce761c09fc383e7aa2f7e6c0b0b65d5a1157c1b98d1f5871f7c38aca47d49b9", + "sha256:9e56180a941b1d32a077d7491e0611d0483c396358afd5349bf00152612e4583" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==1.62.0" + "version": "==1.62.1" }, "grpcio-reflection": { "hashes": [ - "sha256:89f6d27de7bde8bed925e8badb891904045155a9fd3bef9ce75854da12bff1d8", - "sha256:af1707399ef2821c795ecb379550bf5a76fb6409b149ebb346310cfd01da298a" + "sha256:3eff85f74b6b40f8e6116e8363da1efccf775b7a063d2c6fd12c190bbb9676ed", + "sha256:abd453001991871031315ef2d82affe93080c0433fa3a007be34bf427e28a88a" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==1.62.0" + "version": "==1.62.1" }, "grpcio-status": { "hashes": [ - "sha256:0d693e9c09880daeaac060d0c3dba1ae470a43c99e5d20dfeafd62cf7e08a85d", - "sha256:3baac03fcd737310e67758c4082a188107f771d32855bce203331cd4c9aa687a" + "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77", + "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17" ], "markers": "python_version >= '3.6'", - "version": "==1.62.0" + "version": "==1.62.1" }, "idna": { "hashes": [ @@ -416,12 +408,12 @@ }, "packageurl-python": { "hashes": [ - "sha256:cf5e55cdcd61e6de858f47c4986aa87ba493bfa56ba58de11103dfdc2c00e4e1", - "sha256:ff09147cddaae9e5c59ffcb12df8ec0e1b774b45099399f28c36b1a3dfdf52e2" + "sha256:cdc6bd42dc30c4fc7f8f0ccb721fc31f8c33985dbffccb6e6be4c72874de48ca", + "sha256:f219b2ce6348185a27bd6a72e6fdc9f984e6c9fa157effa7cb93e341c49cdcc2" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.14.0" + "version": "==0.15.0" }, "packaging": { "hashes": [ @@ -521,11 +513,11 @@ }, "pyparsing": { "hashes": [ - "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb", - "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db" + "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad", + "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.1.1" + "version": "==3.1.2" }, "pytz": { "hashes": [ @@ -593,19 +585,19 @@ }, "redis": { "hashes": [ - "sha256:3f82cc80d350e93042c8e6e7a5d0596e4dd68715babffba79492733e1f367037", - "sha256:4caa8e1fcb6f3c0ef28dba99535101d80934b7d4cd541bbb47f4a3826ee472d1" + "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580", + "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d" ], "markers": "python_version >= '3.7'", - "version": "==5.0.2" + "version": "==5.0.3" }, "referencing": { "hashes": [ - "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5", - "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7" + "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844", + "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4" ], "markers": "python_version >= '3.8'", - "version": "==0.33.0" + "version": "==0.34.0" }, "requests": { "hashes": [ @@ -737,14 +729,6 @@ "markers": "python_version >= '3.7'", "version": "==3.0.2" }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" - }, "urllib3": { "hashes": [ "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", @@ -757,125 +741,125 @@ "develop": { "grpcio": { "hashes": [ - "sha256:0b9179478b09ee22f4a36b40ca87ad43376acdccc816ce7c2193a9061bf35701", - "sha256:0d3dee701e48ee76b7d6fbbba18ba8bc142e5b231ef7d3d97065204702224e0e", - "sha256:0d7ae7fc7dbbf2d78d6323641ded767d9ec6d121aaf931ec4a5c50797b886532", - "sha256:0e97f37a3b7c89f9125b92d22e9c8323f4e76e7993ba7049b9f4ccbe8bae958a", - "sha256:136ffd79791b1eddda8d827b607a6285474ff8a1a5735c4947b58c481e5e4271", - "sha256:1bc8449084fe395575ed24809752e1dc4592bb70900a03ca42bf236ed5bf008f", - "sha256:1eda79574aec8ec4d00768dcb07daba60ed08ef32583b62b90bbf274b3c279f7", - "sha256:29cb592c4ce64a023712875368bcae13938c7f03e99f080407e20ffe0a9aa33b", - "sha256:2c1488b31a521fbba50ae86423f5306668d6f3a46d124f7819c603979fc538c4", - "sha256:2e84bfb2a734e4a234b116be208d6f0214e68dcf7804306f97962f93c22a1839", - "sha256:2f3d9a4d0abb57e5f49ed5039d3ed375826c2635751ab89dcc25932ff683bbb6", - "sha256:36df33080cd7897623feff57831eb83c98b84640b016ce443305977fac7566fb", - "sha256:38f69de9c28c1e7a8fd24e4af4264726637b72f27c2099eaea6e513e7142b47e", - "sha256:39cd45bd82a2e510e591ca2ddbe22352e8413378852ae814549c162cf3992a93", - "sha256:3fa15850a6aba230eed06b236287c50d65a98f05054a0f01ccedf8e1cc89d57f", - "sha256:4cd356211579043fce9f52acc861e519316fff93980a212c8109cca8f47366b6", - "sha256:56ca7ba0b51ed0de1646f1735154143dcbdf9ec2dbe8cc6645def299bb527ca1", - "sha256:5e709f7c8028ce0443bddc290fb9c967c1e0e9159ef7a030e8c21cac1feabd35", - "sha256:614c3ed234208e76991992342bab725f379cc81c7dd5035ee1de2f7e3f7a9842", - "sha256:62aa1659d8b6aad7329ede5d5b077e3d71bf488d85795db517118c390358d5f6", - "sha256:62ccb92f594d3d9fcd00064b149a0187c246b11e46ff1b7935191f169227f04c", - "sha256:662d3df5314ecde3184cf87ddd2c3a66095b3acbb2d57a8cada571747af03873", - "sha256:748496af9238ac78dcd98cce65421f1adce28c3979393e3609683fcd7f3880d7", - "sha256:77d48e5b1f8f4204889f1acf30bb57c30378e17c8d20df5acbe8029e985f735c", - "sha256:7a195531828b46ea9c4623c47e1dc45650fc7206f8a71825898dd4c9004b0928", - "sha256:7e1f51e2a460b7394670fdb615e26d31d3260015154ea4f1501a45047abe06c9", - "sha256:7eea57444a354ee217fda23f4b479a4cdfea35fb918ca0d8a0e73c271e52c09c", - "sha256:7f9d6c3223914abb51ac564dc9c3782d23ca445d2864321b9059d62d47144021", - "sha256:81531632f93fece32b2762247c4c169021177e58e725494f9a746ca62c83acaa", - "sha256:81d444e5e182be4c7856cd33a610154fe9ea1726bd071d07e7ba13fafd202e38", - "sha256:821a44bd63d0f04e33cf4ddf33c14cae176346486b0df08b41a6132b976de5fc", - "sha256:88f41f33da3840b4a9bbec68079096d4caf629e2c6ed3a72112159d570d98ebe", - "sha256:8aab8f90b2a41208c0a071ec39a6e5dbba16fd827455aaa070fec241624ccef8", - "sha256:921148f57c2e4b076af59a815467d399b7447f6e0ee10ef6d2601eb1e9c7f402", - "sha256:92cdb616be44c8ac23a57cce0243af0137a10aa82234f23cd46e69e115071388", - "sha256:95370c71b8c9062f9ea033a0867c4c73d6f0ff35113ebd2618171ec1f1e903e0", - "sha256:98d8f4eb91f1ce0735bf0b67c3b2a4fea68b52b2fd13dc4318583181f9219b4b", - "sha256:a33f2bfd8a58a02aab93f94f6c61279be0f48f99fcca20ebaee67576cd57307b", - "sha256:ab140a3542bbcea37162bdfc12ce0d47a3cda3f2d91b752a124cc9fe6776a9e2", - "sha256:b3d3d755cfa331d6090e13aac276d4a3fb828bf935449dc16c3d554bf366136b", - "sha256:b71c65427bf0ec6a8b48c68c17356cb9fbfc96b1130d20a07cb462f4e4dcdcd5", - "sha256:b7a6be562dd18e5d5bec146ae9537f20ae1253beb971c0164f1e8a2f5a27e829", - "sha256:bcff647e7fe25495e7719f779cc219bbb90b9e79fbd1ce5bda6aae2567f469f2", - "sha256:c912688acc05e4ff012c8891803659d6a8a8b5106f0f66e0aed3fb7e77898fa6", - "sha256:ce1aafdf8d3f58cb67664f42a617af0e34555fe955450d42c19e4a6ad41c84bd", - "sha256:d6a56ba703be6b6267bf19423d888600c3f574ac7c2cc5e6220af90662a4d6b0", - "sha256:e803e9b58d8f9b4ff0ea991611a8d51b31c68d2e24572cd1fe85e99e8cc1b4f8", - "sha256:eef1d16ac26c5325e7d39f5452ea98d6988c700c427c52cbc7ce3201e6d93334", - "sha256:f359d635ee9428f0294bea062bb60c478a8ddc44b0b6f8e1f42997e5dc12e2ee", - "sha256:f4c04fe33039b35b97c02d2901a164bbbb2f21fb9c4e2a45a959f0b044c3512c", - "sha256:f897b16190b46bc4d4aaf0a32a4b819d559a37a756d7c6b571e9562c360eed72", - "sha256:fbe0c20ce9a1cff75cfb828b21f08d0a1ca527b67f2443174af6626798a754a4", - "sha256:fc2836cb829895ee190813446dce63df67e6ed7b9bf76060262c55fcd097d270", - "sha256:fcc98cff4084467839d0a20d16abc2a76005f3d1b38062464d088c07f500d170" + "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", + "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", + "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", + "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", + "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", + "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", + "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", + "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", + "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", + "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", + "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", + "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", + "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", + "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", + "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", + "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", + "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", + "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", + "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", + "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", + "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", + "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", + "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", + "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", + "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", + "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", + "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", + "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", + "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", + "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", + "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", + "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", + "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", + "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", + "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", + "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", + "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", + "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", + "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", + "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", + "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", + "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", + "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", + "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", + "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", + "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", + "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", + "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", + "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", + "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", + "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", + "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", + "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", + "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.62.1" }, "grpcio-tools": { "hashes": [ - "sha256:006ea0cc16e8bf8f307326e0556e1384f24abb402cc4e6a720aa1dfe8f268647", - "sha256:0d9c9a4832f52c4597d6dc12d9ab3109c3bd0ee1686b8bf6d64f9eab4145e3cb", - "sha256:0e87f105f1d152934759f8975ed002d5ce057b3cdf1cc6cb63fe6008671a27b9", - "sha256:14201950513636f515dd455a06890e3a21d115b943cf6a8f5af67ad1413cfa1f", - "sha256:17c16e9a89c0b9f4ff2b143f232c5256383453ce7b55fe981598f9517adc8252", - "sha256:1927934dfba4658a97c2dab267e53ed239264d40fdd5b295fc317693543db85b", - "sha256:19b74e141937c885c9e56b6a7dfa190ca7d583bd48bce9171dd65bbf108b9271", - "sha256:1faa5006fe9e7b9e65c47bc23f7cd333fdcdd4ba35d44080303848266db5ab05", - "sha256:2e1fd7301d762bf5984b7e7fb62fce82cff864d75f0a57e15cfd07ae1bd79133", - "sha256:2f5bd22203e64e1732e149bfdd3083716d038abca294e4e2852159b3d893f9ec", - "sha256:3730b1cd998a0cffc817602cc55e51f268fa97b3e38fa4bee578e3741474547a", - "sha256:3b526dc5566161a3a17599753838b9cfbdd4cb15b6ad419aae8a5d12053fa8ae", - "sha256:3bbe79b134dfb7c98cf60e4962e31039bef824834cc7034bdf1886a2ed1097f9", - "sha256:3dee3be61d9032f777a9b4e2696ea3d0748a582cb99c672b5d41ca66821e8c87", - "sha256:465c51ebaa184ee3bb619cd5bfaf562bbdde166f2822a6935461e6a741f5ac19", - "sha256:523adf731fa4c5af0bf7ee2edb65e8c7ef4d9df9951461d6a18fe096688efd2d", - "sha256:52b216c458458f6c292e12428916e80974c5113abc505a61e7b0b9f8932a785d", - "sha256:54bb570bd963905de3bda596b35e06026552705edebbb2cb737b57aa5252b9e5", - "sha256:563a75924109e75809b2919e68d7e6ae7872e63d20258aae7899b14f6ff9e18b", - "sha256:5a482d9625209023481e631c29a6df1392bfc49f9accfa880dabbacff642559a", - "sha256:5dacc691b18d2c294ea971720ff980a1e2d68a3f7ddcd2f0670b3204e81c4b18", - "sha256:5eb63d9207b02a0fa30216907e1e7705cc2670f933e77236c6e0eb966ad3b4bf", - "sha256:5f8934715577c9cc0c792b8a77f7d0dd2bb60e951161b10c5f46b60856673240", - "sha256:679cf2507090e010da73e5001665c76de2a5927b2e2110e459222b1c81cb10c2", - "sha256:6999a4e705b03aacad46e625feb7610e47ec88dbd51220c2282b6334f90721fc", - "sha256:6b900ae319b6f9ac1be0ca572dfb41c23a7ff6fcbf36e3be6d3054e1e4c60de6", - "sha256:711314cb4c6c8b3d51bafaee380ffa5012bd0567ed68f1b0b1fc07492b27acab", - "sha256:74196beed18383d53ff3e2412a6c1eefa3ff109e987be240368496bc3dcabc8b", - "sha256:75aca28cbeb605c59b5689a7e000fbc2bd659d2f322c58461f3912f00069f6da", - "sha256:77196c7ac8741d4a2aebb023bcc2964ac65ca44180fd791640889ab2afed3e47", - "sha256:791aa220f8f1936e65bc079e9eb954fa0202a1f16e28b83956e59d17dface127", - "sha256:7fca6ecfbbf0549058bb29dcc6e435d885b878d07701e77ac58e1e1f591736dc", - "sha256:84e27206bd884be83a7fdcef8be3c90eb1591341c0ba9b0d25ec9db1043ba2f2", - "sha256:88aa62303278aec45bbb26bf679269c7890346c37140ae30e39da1070c341e11", - "sha256:95e49839d49e79187c43cd63af5c206dc5743a01d7d3d2f039772fa743cbb30c", - "sha256:98ddf871c614cc0ed331c7159ebbbf5040be562279677d3bb97c2e6083539f72", - "sha256:9ae5cd2f89e33a529790bf8aa59a459484edb05e4f58d4cf78836b9dfa1fab43", - "sha256:a09db3688efd3499ce3c0b02c0bac0656abdab4cb99716f81ad879c08b92c56e", - "sha256:b46ba0b6552b4375ede65e0c89491af532635347f78d52a72f8a027529e713ed", - "sha256:b65288ebe12e38dd3650fea65d82fcce0d35df1ae4a770b525c10119ee71962f", - "sha256:bb6802d63e42734d2baf02e1343377fe18590ed6a1f5ffbdebbbe0f8331f176b", - "sha256:bf9f281f528e0220558d57e09b4518dec148dcb250d78bd9cbb27e09edabb3f9", - "sha256:c85391e06620d6e16a56341caae5007d0c6219beba065e1e288f2523fba6a335", - "sha256:cd1f4caeca614b04db803566473f7db0971e7a88268f95e4a529b0ace699b949", - "sha256:d5652d3a52a2e8e1d9bdf28fbd15e21b166e31b968cd7c8c604bf31611c0bb5b", - "sha256:d5959e3df126931d28cd94dd5f0a708b7dd96019de80ab715fb922fd0c8a838d", - "sha256:dce5f04676cf94e6e2d13d7f91ac2de79097d86675bc4d404a3c24dcc0332c88", - "sha256:e38d5800151e6804d500e329f7ddfb615c50eee0c1607593e3147a4b21037e40", - "sha256:ec6f561c86fe13cff3be16f297cc05e1aa1274294524743a4cf91d971866fbb0", - "sha256:ed6cf7ff4a10c46f85340f9c68982f9efb29f51ee4b66828310fcdf3c2d7ffd1", - "sha256:f0884eaf6a2bbd7b03fea456e808909ee48dd4f7f455519d67defda791116368", - "sha256:f3aaf3b20c0f7063856b2432335af8f76cf580f898e04085548cde28332d6833", - "sha256:f54b5181784464bd3573ae7dbcf053da18a4b7a75fe19960791f383be3d035ca", - "sha256:f74e0053360e0eadd75193c0c379b6d7f51d074ebbff856bd41780e1a028b38d" + "sha256:024380536ba71a96cdf736f0954f6ad03f5da609c09edbcc2ca02fdd639e0eed", + "sha256:07af1a6442e2313cff22af93c2c4dd37ae32b5239b38e0d99e2cbf93de65429f", + "sha256:08fecc3c5b4e6dd3278f2b9d12837e423c7dcff551ca1e587018b4a0fc5f8019", + "sha256:0e140bbc08eea8abf51c0274f45fb1e8350220e64758998d7f3c7f985a0b2496", + "sha256:1344a773d2caa9bb7fbea7e879b84f33740c808c34a5bd2a2768e526117a6b44", + "sha256:13b20e269d14ad629ff9a2c9a2450f3dbb119d5948de63b27ffe624fa7aea85a", + "sha256:156d3e1b227c16e903003a56881dbe60e40f2b4bd66f0bc3b27c53e466e6384d", + "sha256:1819fd055c1ae672d1d725ec75eefd1f700c18acba0ed9332202be31d69c401d", + "sha256:2152308e5321cb90fb45aaa84d03d6dedb19735a8779aaf36c624f97b831842d", + "sha256:21f14b99e0cd38ad56754cc0b62b2bf3cf75f9f7fc40647da54669e0da0726fe", + "sha256:22644c90e43d1a888477899af917979e17364fdd6e9bbb92679cd6a54c4d36c3", + "sha256:23eb3d47f78f509fcd201749b1f1e44b76f447913f7fbb3b8bae20f109086295", + "sha256:2744947b6c5e907af21133431809ccca535a037356864e32c122efed8cb9de1f", + "sha256:2b04844a9382f1bde4b4174e476e654ab3976168d2469cb4b29e352f4f35a5aa", + "sha256:2eea1db3748b2f37b4dce84d8e0c15d9bc811094807cabafe7b0ea47f424dfd5", + "sha256:41384c9ee18e61ef20cad2774ef71bd8854b63efce263b5177aa06fccb84df1f", + "sha256:449503213d142f8470b331a1c2f346f8457f16c7fe20f531bc2500e271f7c14c", + "sha256:45d2e6cf04d27286b6f73e6e20ba3f0a1f6d8f5535e5dcb1356200419bb457f4", + "sha256:46ae58e6926773e7315e9005f0f17aacedbc0895a8752bec087d24efa2f1fb21", + "sha256:4c28086df31478023a36f45e50767872ab3aed2419afff09814cb61c88b77db4", + "sha256:50739aaab0c8076ad5957204e71f2e0c9876e11fd8338f7f09de12c2d75163c5", + "sha256:52b185dfc3bf32e70929310367dbc66185afba60492a6a75a9b1141d407e160c", + "sha256:575535d039b97d63e6a9abee626d6c7cd47bd8cb73dd00a5c84a98254a2164a4", + "sha256:598c54318f0326cf5020aa43fc95a15e933aba4a71943d3bff2677d2d21ddfa1", + "sha256:5ad7c5691625a85327e5b683443baf73ae790fd5afc938252041ed5cd665e377", + "sha256:5c38006f7702d2ff52122e4c77a47348709374050c76216e84b30a9f06e45afa", + "sha256:5d7bdea33354b55acf40bb4dd3ba7324d6f1ef6b4a1a4da0807591f8c7e87b9a", + "sha256:5dbe1f7481dd14b6d477b4bace96d275090bc7636b9883975a08b802c94e7b78", + "sha256:63a273b70896d3640b7a883eb4a080c3c263d91662d870a2e9c84b7bbd978e7b", + "sha256:6abd4eb3ccb444383a40156139acc3aaa73745d395139cb6bc8e2a3429e1e627", + "sha256:7444fcab861911525470d398e5638b70d5cbea3b4674a3de92b5c58c5c515d4d", + "sha256:771c051c5ece27ad03e4f2e33624a925f0ad636c01757ab7dbb04a37964af4ba", + "sha256:941f8a5c31986053e75fa466bcfa743c2bf1b513b7978cf1f4ab4e96a8219d27", + "sha256:975ac5fb482c23f3608c16e06a43c8bab4d79c2e2564cdbc25cf753c6e998775", + "sha256:98209c438b38b6f1276dbc27b1c04e346a75bfaafe72a25a548f2dc5ce71d226", + "sha256:999823758e9eacd0095863d06cd6d388be769f80c9abb65cdb11c4f2cfce3fea", + "sha256:9a11bcf609d00cfc9baed77ab308223cabc1f0b22a05774a26dd4c94c0c80f1f", + "sha256:a01e8dcd0f041f6fa6d815c54a2017d032950e310c41d514a8bc041e872c4d12", + "sha256:a4991e5ee8a97ab791296d3bf7e8700b1445635cc1828cc98df945ca1802d7f2", + "sha256:a4fba5b339f4797548591036c9481e6895bf920fab7d3dc664d2697f8fb7c0bf", + "sha256:b76aead9b73f1650a091870fe4e9ed15ac4d8ed136f962042367255199c23594", + "sha256:b9c02c88c77ef6057c6cbeea8922d7c2424aabf46bfc40ddf42a32765ba91061", + "sha256:d03b645852d605f43003020e78fe6d573cae6ee6b944193e36b8b317e7549a20", + "sha256:d1924a6a943df7c73b9ef0048302327c75962b567451479710da729ead241228", + "sha256:d66a5d47eaa427039752fa0a83a425ff2a487b6a0ac30556fd3be2f3a27a0130", + "sha256:dd933b8e0b3c13fe3543d58f849a6a5e0d7987688cb6801834278378c724f695", + "sha256:e643cd14a5d1e59865cba68a5a6f0175d987f36c5f4cb0db80dee9ed60b4c174", + "sha256:ed1f27dc2b2262c8b8d9036276619c1bb18791311c16ccbf1f31b660f2aad7cf", + "sha256:f2b404bcae7e2ef9b0b9803b2a95119eb7507e6dc80ea4a64a78be052c30cebc", + "sha256:f309bdb33a61f8e049480d41498ee2e525cfb5e959958b326abfdf552bf9b9cb", + "sha256:f358effd3c11d66c150e0227f983d54a5cd30e14038566dadcf25f9f6844e6e8", + "sha256:fd5d47707bd6bc2b707ece765c362d2a1d2e8f6cd92b04c99fab49a929f3610c", + "sha256:fdd987a580b4474769adfd40144486f54bcc73838d5ec5d3647a17883ea78e76", + "sha256:fe71ca30aabe42591e84ecb9694c0297dc699cc20c5b24d2cb267fb0fc01f947" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.62.1" }, "protobuf": { "hashes": [ @@ -896,11 +880,11 @@ }, "setuptools": { "hashes": [ - "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56", - "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], "markers": "python_version >= '3.8'", - "version": "==69.1.1" + "version": "==69.2.0" } } } From 2ed3d46bd5c433bbbb06b72d7c0c171546646550 Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Tue, 2 Apr 2024 16:02:45 +1100 Subject: [PATCH 25/56] Guided remediation blog post (#2082) --- .../gr_inplace.png | Bin 0 -> 74174 bytes .../gr_main.png | Bin 0 -> 267154 bytes .../gr_relock.png | Bin 0 -> 198036 bytes .../index.md | 45 ++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_inplace.png create mode 100644 gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_main.png create mode 100644 gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_relock.png create mode 100644 gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/index.md diff --git a/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_inplace.png b/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_inplace.png new file mode 100644 index 0000000000000000000000000000000000000000..83c846fa439ccff721e4ce46ee31ec95441d86a6 GIT binary patch literal 74174 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 z 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 HCx8EMulT24 literal 0 HcmV?d00001 diff --git a/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_main.png b/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/gr_main.png new file mode 100644 index 0000000000000000000000000000000000000000..a67e5046595338734861407aa5df020a3493e85f GIT binary patch literal 267154 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 a6B{%^= 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ɲ*mf=kmY$9`%GMpfB&17 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 z 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

    tQ227)=}%9OB--=v+&;| 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%0Dxmb(q7?@xhZxk}x4_-# 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

    vra*i@#}Ei00@e%jQp# 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 OKx40#TH@}XF8mukGwd7y literal 0 HcmV?d00001 diff --git a/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/index.md b/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/index.md new file mode 100644 index 00000000000..de4ee3ef6eb --- /dev/null +++ b/gcp/appengine/blog/content/posts/announcing-guided-remediation-in-osv-scanner/index.md @@ -0,0 +1,45 @@ +--- +title: "Announcing Guided Remediation in OSV-Scanner" +date: 2024-04-02T00:00:00Z +draft: false +author: Michael Kedar +--- + +Addressing vulnerabilities in project dependencies can often be overwhelming for software developers. OSV-Scanner's new [Guided Remediation feature](https://google.github.io/osv-scanner/experimental/guided-remediation/) aims to simplify this process by prioritizing and fixing the vulnerabilities that matter most in your projects. + +The tool is now available with the OSV-Scanner 1.7.0 release under the `osv-scanner fix` subcommand. Currently, it only supports npm `package.json` / `package-lock.json` dependencies, but we're planning to expand support to more ecosystems in the future. + + +## What can Guided Remediation do? +Guided Remediation scans your project's manifest and lockfile, identifying vulnerable dependencies and suggesting upgrades that will resolve them. There are two different upgrade strategies to choose from: +- In-place lockfile modification, which does targetted updates to vulnerable packages while still maintaining compatibility with the existing constraints in your dependency graph. +- Relocking and relaxing requirements, to install the most up-to-date versions of your dependencies and upgrade your direct requirements to remove vulnerable packages from the dependency graph. + +The tool prioritizes its suggested upgrades to maximize your return on investment for a given change, focusing first on upgrades that resolve the most vulnerabilities with the least amount of changed dependencies. + +In conjunction with the different strategies, Guided Remediation also allows you to filter vulnerabilities based on metrics like CVSS severity, dependency depth, and whether they affect production or development dependencies. This allows you to control which vulnerabilities you wish to target. + +## Using Guided Remediation +For basic usage, you can attempt to resolve as many vulnerabilities as possible in your manifest/lockfile with one of the following commands: + +```bash +osv-scanner fix --non-interactive --strategy=in-place -L path/to/package-lock.json +``` +```bash +osv-scanner fix --non-interactive --strategy=relock -M path/to/package.json -L path/to/package-lock.json +``` + +For more complex scenarios, the interactive mode provides finer control over the remediation process. +```bash +osv-scanner fix -M path/to/package.json -L path/to/package-lock.json +``` +![The interactive guided remediation vulnerability results screen](gr_main.png "The interactive guided remediation vulnerability results screen") +![The interactive guided remediation in-place strategy screen](gr_inplace.png "The interactive guided remediation in-place strategy screen") +![The interactive guided remediation relock strategy screen](gr_relock.png "The interactive guided remediation relock strategy screen") + +All filtering metrics found in the interactive mode are also available as CLI flags for the non-interactive mode, allowing you to integrate and automate guided remediation in your CI/test pipelines. + +See our [detailed documentation](https://google.github.io/osv-scanner/experimental/guided-remediation/) for more usage information. + +## Try it yourself! +If you have any npm projects with known vulnerabilities, try Guided Remediation today! It's available in the [latest OSV-Scanner release](https://github.com/google/osv-scanner/releases/latest) and we'd love to hear your [feedback](https://github.com/google/osv-scanner/issues). From 0b2fa526ac7dcfc4e9c0d72ff7d2374221785c35 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 3 Apr 2024 02:52:08 +0200 Subject: [PATCH 26/56] chore(deps): lock file maintenance (#2083) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- Pipfile.lock | 481 +++++++++++++++++++++++++-------------------------- 1 file changed, 237 insertions(+), 244 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index f27d81ae3ed..8a265ac7e86 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -27,11 +27,11 @@ }, "cachetools": { "hashes": [ - "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2", - "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1" + "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945", + "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105" ], "markers": "python_version >= '3.7'", - "version": "==5.3.2" + "version": "==5.3.3" }, "certifi": { "hashes": [ @@ -200,27 +200,27 @@ "grpc" ], "hashes": [ - "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e", - "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95" + "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6", + "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9" ], "markers": "python_version >= '3.7'", - "version": "==2.17.1" + "version": "==2.18.0" }, "google-auth": { "hashes": [ - "sha256:3cfc1b6e4e64797584fb53fc9bd0b7afa9b7c0dba2004fa7dcc9349e58cc3195", - "sha256:7634d29dcd1e101f5226a23cbc4a0c6cda6394253bf80e281d9c5c6797869c53" + "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360", + "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415" ], "markers": "python_version >= '3.7'", - "version": "==2.28.0" + "version": "==2.29.0" }, "google-cloud-appengine-logging": { "hashes": [ - "sha256:851dad2c4dd85dcf5b9e32879acda998a250e82c4d4f2bd5ef67b904840c7b17", - "sha256:9905c7c30c3c2bbedd0b132e2b271fc8247333ebc931d2d23af1bbbd11b435fe" + "sha256:8e30af51d853f219caf29e8b8b342b9ce8214b29f334dafae38d39aaaff7d372", + "sha256:fb504e6199fe8de85baa9d31cecf6776877851fe58867de603317ec7cc739987" ], "markers": "python_version >= '3.7'", - "version": "==1.4.1" + "version": "==1.4.3" }, "google-cloud-audit-log": { "hashes": [ @@ -248,30 +248,30 @@ }, "google-cloud-logging": { "hashes": [ - "sha256:094a2db068ff7f38c9e0c1017673fa49c0768fbae02769e03e06baa30f138b87", - "sha256:4decb1b0bed4a0e3c0e58a376646e6002d6be7cad039e3466822e8665072ea33" + "sha256:132192beb45731130a2ffbcd4b2b5cbd87370e7dcfa7397ae4002154f542bd20", + "sha256:d93d347351240ddb14cfe201987a2d32cf9d7f478b8b2fabed3015b425b3274f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==3.9.0" + "version": "==3.10.0" }, "google-cloud-ndb": { "hashes": [ - "sha256:39268ab29244035f68d35177ebafc7c89760e956171b8495d2640050682c228e", - "sha256:a23fb6754ee8b8cd6b6a8bc9bd39cae858b9e8000882c1041f133429226e610b" + "sha256:3d6c8866681dc280ad9f90a6f5b556d324e4b29173d0b63ddf6b8e19655fec1a", + "sha256:a6a2f6c58bd14febb92c0e569ca6a4e1d14c4a70935c28f3681e33c67402428f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.2.2" + "version": "==2.3.1" }, "google-cloud-storage": { "hashes": [ - "sha256:2d23fcf59b55e7b45336729c148bb1c464468c69d5efbaee30f7201dd90eb97e", - "sha256:8641243bbf2a2042c16a6399551fbb13f062cbc9a2de38d6c0bb5426962e9dbd" + "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852", + "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.14.0" + "version": "==2.16.0" }, "google-crc32c": { "hashes": [ @@ -360,11 +360,11 @@ "grpc" ], "hashes": [ - "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07", - "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277" + "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e", + "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632" ], "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.63.0" }, "grpc-google-iam-v1": { "hashes": [ @@ -376,71 +376,71 @@ }, "grpcio": { "hashes": [ - "sha256:0250a7a70b14000fa311de04b169cc7480be6c1a769b190769d347939d3232a8", - "sha256:069fe2aeee02dfd2135d562d0663fe70fbb69d5eed6eb3389042a7e963b54de8", - "sha256:082081e6a36b6eb5cf0fd9a897fe777dbb3802176ffd08e3ec6567edd85bc104", - "sha256:0c5807e9152eff15f1d48f6b9ad3749196f79a4a050469d99eecb679be592acc", - "sha256:14e8f2c84c0832773fb3958240c69def72357bc11392571f87b2d7b91e0bb092", - "sha256:2a6087f234cb570008a6041c8ffd1b7d657b397fdd6d26e83d72283dae3527b1", - "sha256:2bb2a2911b028f01c8c64d126f6b632fcd8a9ac975aa1b3855766c94e4107180", - "sha256:2f44c32aef186bbba254129cea1df08a20be414144ac3bdf0e84b24e3f3b2e05", - "sha256:30e980cd6db1088c144b92fe376747328d5554bc7960ce583ec7b7d81cd47287", - "sha256:33aed0a431f5befeffd9d346b0fa44b2c01aa4aeae5ea5b2c03d3e25e0071216", - "sha256:33bdea30dcfd4f87b045d404388469eb48a48c33a6195a043d116ed1b9a0196c", - "sha256:39aa848794b887120b1d35b1b994e445cc028ff602ef267f87c38122c1add50d", - "sha256:4216e67ad9a4769117433814956031cb300f85edc855252a645a9a724b3b6594", - "sha256:49c9b6a510e3ed8df5f6f4f3c34d7fbf2d2cae048ee90a45cd7415abab72912c", - "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87", - "sha256:50d56280b482875d1f9128ce596e59031a226a8b84bec88cb2bf76c289f5d0de", - "sha256:53b69e79d00f78c81eecfb38f4516080dc7f36a198b6b37b928f1c13b3c063e9", - "sha256:55ccb7db5a665079d68b5c7c86359ebd5ebf31a19bc1a91c982fd622f1e31ff2", - "sha256:5a1ebbae7e2214f51b1f23b57bf98eeed2cf1ba84e4d523c48c36d5b2f8829ff", - "sha256:61b7199cd2a55e62e45bfb629a35b71fc2c0cb88f686a047f25b1112d3810904", - "sha256:660fc6b9c2a9ea3bb2a7e64ba878c98339abaf1811edca904ac85e9e662f1d73", - "sha256:6d140bdeb26cad8b93c1455fa00573c05592793c32053d6e0016ce05ba267549", - "sha256:6e490fa5f7f5326222cb9f0b78f207a2b218a14edf39602e083d5f617354306f", - "sha256:6ecf21d20d02d1733e9c820fb5c114c749d888704a7ec824b545c12e78734d1c", - "sha256:70c83bb530572917be20c21f3b6be92cd86b9aecb44b0c18b1d3b2cc3ae47df0", - "sha256:72153a0d2e425f45b884540a61c6639436ddafa1829a42056aa5764b84108b8e", - "sha256:73e14acd3d4247169955fae8fb103a2b900cfad21d0c35f0dcd0fdd54cd60367", - "sha256:76eaaba891083fcbe167aa0f03363311a9f12da975b025d30e94b93ac7a765fc", - "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303", - "sha256:7d142bcd604166417929b071cd396aa13c565749a4c840d6c702727a59d835eb", - "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c", - "sha256:8d488fbdbf04283f0d20742b64968d44825617aa6717b07c006168ed16488804", - "sha256:91422ba785a8e7a18725b1dc40fbd88f08a5bb4c7f1b3e8739cab24b04fa8a03", - "sha256:9a66f4d2a005bc78e61d805ed95dedfcb35efa84b7bba0403c6d60d13a3de2d6", - "sha256:9b106bc52e7f28170e624ba61cc7dc6829566e535a6ec68528f8e1afbed1c41f", - "sha256:9b54577032d4f235452f77a83169b6527bf4b77d73aeada97d45b2aaf1bf5ce0", - "sha256:a09506eb48fa5493c58f946c46754ef22f3ec0df64f2b5149373ff31fb67f3dd", - "sha256:a212e5dea1a4182e40cd3e4067ee46be9d10418092ce3627475e995cca95de21", - "sha256:a731ac5cffc34dac62053e0da90f0c0b8560396a19f69d9703e88240c8f05858", - "sha256:af5ef6cfaf0d023c00002ba25d0751e5995fa0e4c9eec6cd263c30352662cbce", - "sha256:b58b855d0071575ea9c7bc0d84a06d2edfbfccec52e9657864386381a7ce1ae9", - "sha256:bc808924470643b82b14fe121923c30ec211d8c693e747eba8a7414bc4351a23", - "sha256:c557e94e91a983e5b1e9c60076a8fd79fea1e7e06848eb2e48d0ccfb30f6e073", - "sha256:c71be3f86d67d8d1311c6076a4ba3b75ba5703c0b856b4e691c9097f9b1e8bd2", - "sha256:c8754c75f55781515a3005063d9a05878b2cfb3cb7e41d5401ad0cf19de14872", - "sha256:cb0af13433dbbd1c806e671d81ec75bd324af6ef75171fd7815ca3074fe32bfe", - "sha256:cba6209c96828711cb7c8fcb45ecef8c8859238baf15119daa1bef0f6c84bfe7", - "sha256:cf77f8cf2a651fbd869fbdcb4a1931464189cd210abc4cfad357f1cacc8642a6", - "sha256:d7404cebcdb11bb5bd40bf94131faf7e9a7c10a6c60358580fe83913f360f929", - "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962", - "sha256:e5d97c65ea7e097056f3d1ead77040ebc236feaf7f71489383d20f3b4c28412a", - "sha256:f1c3dc536b3ee124e8b24feb7533e5c70b9f2ef833e3b2e5513b2897fd46763a", - "sha256:f2212796593ad1d0235068c79836861f2201fc7137a99aa2fea7beeb3b101177", - "sha256:fead980fbc68512dfd4e0c7b1f5754c2a8e5015a04dea454b9cada54a8423525" + "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", + "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", + "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", + "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", + "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", + "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", + "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", + "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", + "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", + "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", + "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", + "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", + "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", + "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", + "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", + "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", + "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", + "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", + "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", + "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", + "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", + "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", + "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", + "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", + "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", + "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", + "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", + "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", + "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", + "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", + "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", + "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", + "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", + "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", + "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", + "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", + "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", + "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", + "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", + "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", + "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", + "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", + "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", + "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", + "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", + "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", + "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", + "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", + "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", + "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", + "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", + "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", + "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", + "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.60.1" + "version": "==1.62.1" }, "grpcio-status": { "hashes": [ - "sha256:3034fdb239185b6e0f3169d08c268c4507481e4b8a434c21311a03d9eb5889a0", - "sha256:61b5aab8989498e8aa142c20b88829ea5d90d18c18c853b9f9e6d407d37bf8b4" + "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77", + "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17" ], - "version": "==1.60.1" + "version": "==1.62.1" }, "idna": { "hashes": [ @@ -503,26 +503,27 @@ }, "pyasn1": { "hashes": [ - "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58", - "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c" + "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c", + "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.5.1" + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, "pyasn1-modules": { "hashes": [ - "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", - "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", + "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.3.0" + "markers": "python_version >= '3.8'", + "version": "==0.4.0" }, "pycparser": { "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "version": "==2.21" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pygit2": { "hashes": [ @@ -566,11 +567,11 @@ }, "pyparsing": { "hashes": [ - "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb", - "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db" + "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad", + "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.1.1" + "version": "==3.1.2" }, "pytz": { "hashes": [ @@ -639,19 +640,19 @@ }, "redis": { "hashes": [ - "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f", - "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f" + "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580", + "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d" ], "markers": "python_version >= '3.7'", - "version": "==5.0.1" + "version": "==5.0.3" }, "referencing": { "hashes": [ - "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5", - "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7" + "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844", + "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4" ], "markers": "python_version >= '3.8'", - "version": "==0.33.0" + "version": "==0.34.0" }, "requests": { "hashes": [ @@ -783,14 +784,6 @@ "markers": "python_version >= '3.7'", "version": "==3.0.2" }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" - }, "urllib3": { "hashes": [ "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", @@ -803,11 +796,11 @@ "develop": { "astroid": { "hashes": [ - "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93", - "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17" + "sha256:951798f922990137ac090c53af473db7ab4e70c770e6d7fae0cec59f74411819", + "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4" ], "markers": "python_full_version >= '3.8.0'", - "version": "==3.0.3" + "version": "==3.1.0" }, "certifi": { "hashes": [ @@ -834,141 +827,141 @@ }, "filelock": { "hashes": [ - "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e", - "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c" + "sha256:5ffa845303983e7a0b7ae17636509bc97997d58afeafa72fb141a17b152284cb", + "sha256:a79895a25bbefdf55d1a2a0a80968f7dbb28edcd6d4234a0afb3f37ecde4b546" ], "markers": "python_version >= '3.8'", - "version": "==3.13.1" + "version": "==3.13.3" }, "grpcio": { "hashes": [ - "sha256:0250a7a70b14000fa311de04b169cc7480be6c1a769b190769d347939d3232a8", - "sha256:069fe2aeee02dfd2135d562d0663fe70fbb69d5eed6eb3389042a7e963b54de8", - "sha256:082081e6a36b6eb5cf0fd9a897fe777dbb3802176ffd08e3ec6567edd85bc104", - "sha256:0c5807e9152eff15f1d48f6b9ad3749196f79a4a050469d99eecb679be592acc", - "sha256:14e8f2c84c0832773fb3958240c69def72357bc11392571f87b2d7b91e0bb092", - "sha256:2a6087f234cb570008a6041c8ffd1b7d657b397fdd6d26e83d72283dae3527b1", - "sha256:2bb2a2911b028f01c8c64d126f6b632fcd8a9ac975aa1b3855766c94e4107180", - "sha256:2f44c32aef186bbba254129cea1df08a20be414144ac3bdf0e84b24e3f3b2e05", - "sha256:30e980cd6db1088c144b92fe376747328d5554bc7960ce583ec7b7d81cd47287", - "sha256:33aed0a431f5befeffd9d346b0fa44b2c01aa4aeae5ea5b2c03d3e25e0071216", - "sha256:33bdea30dcfd4f87b045d404388469eb48a48c33a6195a043d116ed1b9a0196c", - "sha256:39aa848794b887120b1d35b1b994e445cc028ff602ef267f87c38122c1add50d", - "sha256:4216e67ad9a4769117433814956031cb300f85edc855252a645a9a724b3b6594", - "sha256:49c9b6a510e3ed8df5f6f4f3c34d7fbf2d2cae048ee90a45cd7415abab72912c", - "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87", - "sha256:50d56280b482875d1f9128ce596e59031a226a8b84bec88cb2bf76c289f5d0de", - "sha256:53b69e79d00f78c81eecfb38f4516080dc7f36a198b6b37b928f1c13b3c063e9", - "sha256:55ccb7db5a665079d68b5c7c86359ebd5ebf31a19bc1a91c982fd622f1e31ff2", - "sha256:5a1ebbae7e2214f51b1f23b57bf98eeed2cf1ba84e4d523c48c36d5b2f8829ff", - "sha256:61b7199cd2a55e62e45bfb629a35b71fc2c0cb88f686a047f25b1112d3810904", - "sha256:660fc6b9c2a9ea3bb2a7e64ba878c98339abaf1811edca904ac85e9e662f1d73", - "sha256:6d140bdeb26cad8b93c1455fa00573c05592793c32053d6e0016ce05ba267549", - "sha256:6e490fa5f7f5326222cb9f0b78f207a2b218a14edf39602e083d5f617354306f", - "sha256:6ecf21d20d02d1733e9c820fb5c114c749d888704a7ec824b545c12e78734d1c", - "sha256:70c83bb530572917be20c21f3b6be92cd86b9aecb44b0c18b1d3b2cc3ae47df0", - "sha256:72153a0d2e425f45b884540a61c6639436ddafa1829a42056aa5764b84108b8e", - "sha256:73e14acd3d4247169955fae8fb103a2b900cfad21d0c35f0dcd0fdd54cd60367", - "sha256:76eaaba891083fcbe167aa0f03363311a9f12da975b025d30e94b93ac7a765fc", - "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303", - "sha256:7d142bcd604166417929b071cd396aa13c565749a4c840d6c702727a59d835eb", - "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c", - "sha256:8d488fbdbf04283f0d20742b64968d44825617aa6717b07c006168ed16488804", - "sha256:91422ba785a8e7a18725b1dc40fbd88f08a5bb4c7f1b3e8739cab24b04fa8a03", - "sha256:9a66f4d2a005bc78e61d805ed95dedfcb35efa84b7bba0403c6d60d13a3de2d6", - "sha256:9b106bc52e7f28170e624ba61cc7dc6829566e535a6ec68528f8e1afbed1c41f", - "sha256:9b54577032d4f235452f77a83169b6527bf4b77d73aeada97d45b2aaf1bf5ce0", - "sha256:a09506eb48fa5493c58f946c46754ef22f3ec0df64f2b5149373ff31fb67f3dd", - "sha256:a212e5dea1a4182e40cd3e4067ee46be9d10418092ce3627475e995cca95de21", - "sha256:a731ac5cffc34dac62053e0da90f0c0b8560396a19f69d9703e88240c8f05858", - "sha256:af5ef6cfaf0d023c00002ba25d0751e5995fa0e4c9eec6cd263c30352662cbce", - "sha256:b58b855d0071575ea9c7bc0d84a06d2edfbfccec52e9657864386381a7ce1ae9", - "sha256:bc808924470643b82b14fe121923c30ec211d8c693e747eba8a7414bc4351a23", - "sha256:c557e94e91a983e5b1e9c60076a8fd79fea1e7e06848eb2e48d0ccfb30f6e073", - "sha256:c71be3f86d67d8d1311c6076a4ba3b75ba5703c0b856b4e691c9097f9b1e8bd2", - "sha256:c8754c75f55781515a3005063d9a05878b2cfb3cb7e41d5401ad0cf19de14872", - "sha256:cb0af13433dbbd1c806e671d81ec75bd324af6ef75171fd7815ca3074fe32bfe", - "sha256:cba6209c96828711cb7c8fcb45ecef8c8859238baf15119daa1bef0f6c84bfe7", - "sha256:cf77f8cf2a651fbd869fbdcb4a1931464189cd210abc4cfad357f1cacc8642a6", - "sha256:d7404cebcdb11bb5bd40bf94131faf7e9a7c10a6c60358580fe83913f360f929", - "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962", - "sha256:e5d97c65ea7e097056f3d1ead77040ebc236feaf7f71489383d20f3b4c28412a", - "sha256:f1c3dc536b3ee124e8b24feb7533e5c70b9f2ef833e3b2e5513b2897fd46763a", - "sha256:f2212796593ad1d0235068c79836861f2201fc7137a99aa2fea7beeb3b101177", - "sha256:fead980fbc68512dfd4e0c7b1f5754c2a8e5015a04dea454b9cada54a8423525" + "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", + "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", + "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", + "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", + "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", + "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", + "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", + "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", + "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", + "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", + "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", + "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", + "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", + "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", + "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", + "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", + "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", + "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", + "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", + "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", + "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", + "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", + "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", + "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", + "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", + "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", + "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", + "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", + "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", + "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", + "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", + "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", + "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", + "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", + "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", + "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", + "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", + "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", + "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", + "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", + "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", + "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", + "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", + "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", + "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", + "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", + "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", + "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", + "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", + "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", + "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", + "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", + "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", + "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.60.1" + "version": "==1.62.1" }, "grpcio-tools": { "hashes": [ - "sha256:075bb67895970f96aabc1761ca674bf4db193f8fcad387f08e50402023b5f953", - "sha256:0aa34c7c21cff2177a4096b2b0d51dfbc9f8a41f929847a434e89b352c5a215d", - "sha256:0b62cb2d43a7f0eacc6a6962dfff7c2564874012e1a72ae4167e762f449e2912", - "sha256:15f13e8f3d77b96adcb1e3615acec5b100bd836c6010c58a51465bcb9c06d128", - "sha256:184b27333b627a7cc0972fb70d21a8bb7c02ac4a6febc16768d78ea8ff883ddd", - "sha256:18d7737f29ef5bbe3352547d0eccd080807834f00df223867dfc860bf81e9180", - "sha256:1e96a532d38411f0543fe1903ff522f7142a9901afb0ed94de58d79caf1905be", - "sha256:214281cdafb7acfdcde848eca2de7c888a6e2b5cd25ab579712b965ea09a9cd4", - "sha256:22ce3e3d861321d208d8bfd6161ab976623520b179712c90b2c175151463a6b1", - "sha256:26f91161a91f1601777751230eaaafdf416fed08a15c3ba2ae391088e4a906c6", - "sha256:284749d20fb22418f17d3d351b9eb838caf4a0393a9cb02c36e5c32fa4bbe9db", - "sha256:28ae665113affebdd109247386786e5ab4dccfcfad1b5f68e9cce2e326b57ee6", - "sha256:2973f75e8ba5c551033a1d59cc97654f6f386deaf2559082011d245d7ed87bba", - "sha256:2a7fa55bc62d4b8ebe6fb26f8cf89df3cf3b504eb6c5f3a2f0174689d35fddb0", - "sha256:2c19be2bba5583e30f88bb5d71b430176c396f0d6d0db3785e5845bfa3d28cd2", - "sha256:31294b534f25f02ead204e58dcbe0e5437a95a1a6f276bb9378905595b02ff6d", - "sha256:3aeecd5b8faa2aab67e6c8b8a57e888c00ce70d39f331ede0a21312e92def1a6", - "sha256:3fb6f4d2df0388c35c2804ba170f511238a681b679ead013bfe5e39d0ea9cf48", - "sha256:3fcabf484720a9fa1690e2825fc940027a05a0c79a1075a730008ef634bd8ad2", - "sha256:402efeec36d8b12b792bae8a900085416fc2f57a34b599445ace2e847b6b0d75", - "sha256:40cd8268a675269ce59c4fa50877597ec638bb1099c52237bb726c8ac9791868", - "sha256:46b495bae31c5d3f6ac0240eb848f0642b5410f80dff2aacdea20cdea3938c1d", - "sha256:4e66fe204da15e08e599adb3060109a42927c0868fe8933e2d341ea649eceb03", - "sha256:5b4a939097005531edec331f22d0b82bff26e71ede009354d2f375b5d41e74f0", - "sha256:5c7ed086fef5ff59f46d53a052b1934b73e0f7d12365d656d6af3a88057d5a3e", - "sha256:5ea6e397d87f458bb2c387a4a6e1b65df74ce5b5194a1f16850c38309012e981", - "sha256:652b08c9fef39186ce4f97f05f5440c0ed41f117db0f7d6cb0e0d75dbc6afd3f", - "sha256:6801cfc5a85f0fb6fd12cade45942aaa1c814422328d594d12d364815fe34123", - "sha256:8540f6480428a52614db71dd6394f52cbc0d2565b5ea1136a982f26390a42c7a", - "sha256:8c4b917aa4fcdc77990773063f0f14540aab8d4a8bf6c862b964a45d891a31d2", - "sha256:985ac476da365267a2367ab20060f9096fbfc2e190fb02dd394f9ec05edf03ca", - "sha256:9aadc9c00baa2064baa4414cff7c269455449f14805a355226674d89c507342c", - "sha256:9bba347000f57dae8aea79c0d76ef7d72895597524d30d0170c7d1974a3a03f3", - "sha256:a2bb8efc2cd64bd8f2779b426dd7e94e60924078ba5150cbbb60a846e62d1ed2", - "sha256:a8cfab27ba2bd36a3e3b522aed686133531e8b919703d0247a0885dae8815317", - "sha256:aafc94616c5f89c891d859057b194a153c451f9921053454e9d7d4cbf79047eb", - "sha256:acdba77584981fe799104aa545d9d97910bcf88c69b668b768c1f3e7d7e5afac", - "sha256:af88a2062b9c35034a80b25f289034b9c3c00c42bb88efaa465503a06fbd6a87", - "sha256:b1041377cf32ee2338284ee26e6b9c10f9ea7728092376b19803dcb9b91d510d", - "sha256:b5ae375207af9aa82f516dcd513d2e0c83690b7788d45844daad846ed87550f8", - "sha256:b6ef213cb0aecb2832ee82a2eac32f29f31f50b17ce020604d82205096a6bd0c", - "sha256:bba7230c60238c7a4ffa29f1aff6d78edb41f2c79cbe4443406472b1c80ccb5d", - "sha256:bd85f6c368b93ae45edf8568473053cb1cc075ef3489efb18f9832d4ecce062f", - "sha256:c1047bd831de5d9da761e9dc246988d5f07d722186938dfd5f34807398101010", - "sha256:c20e752ff5057758845f4e5c7a298739bfba291f373ed18ea9c7c7acbe69e8ab", - "sha256:c354505e6a3d170da374f20404ea6a78135502df4f5534e5c532bdf24c4cc2a5", - "sha256:cc8ba358d2c658c6ecbc58e779bf0fc5a673fecac015a70db27fc5b4d37b76b6", - "sha256:cf945bd22f396c0d0c691e0990db2bfc4e77816b1edc2aea8a69c35ae721aac9", - "sha256:d2c26ce5f774c98bd2d3d8d1703048394018b55d297ebdb41ed2ba35b9a34f68", - "sha256:da08224ab8675c6d464b988bd8ca02cccd2bf0275bceefe8f6219bfd4a4f5e85", - "sha256:dffa326cf901fe08a0e218d9fdf593f12276088a8caa07fcbec7d051149cf9ef", - "sha256:e529cd3d4109a6f4a3f7bdaca68946eb33734e2d7ffe861785a0586abe99ee67", - "sha256:eba5fafd70585fbd4cb6ae45e3c5e11d8598e2426c9f289b78f682c0606e81cb", - "sha256:f95bdc6c7c50b7fc442e53537bc5b4eb8cab2a671c1da80d40b5a4ab1fd5d416" + "sha256:024380536ba71a96cdf736f0954f6ad03f5da609c09edbcc2ca02fdd639e0eed", + "sha256:07af1a6442e2313cff22af93c2c4dd37ae32b5239b38e0d99e2cbf93de65429f", + "sha256:08fecc3c5b4e6dd3278f2b9d12837e423c7dcff551ca1e587018b4a0fc5f8019", + "sha256:0e140bbc08eea8abf51c0274f45fb1e8350220e64758998d7f3c7f985a0b2496", + "sha256:1344a773d2caa9bb7fbea7e879b84f33740c808c34a5bd2a2768e526117a6b44", + "sha256:13b20e269d14ad629ff9a2c9a2450f3dbb119d5948de63b27ffe624fa7aea85a", + "sha256:156d3e1b227c16e903003a56881dbe60e40f2b4bd66f0bc3b27c53e466e6384d", + "sha256:1819fd055c1ae672d1d725ec75eefd1f700c18acba0ed9332202be31d69c401d", + "sha256:2152308e5321cb90fb45aaa84d03d6dedb19735a8779aaf36c624f97b831842d", + "sha256:21f14b99e0cd38ad56754cc0b62b2bf3cf75f9f7fc40647da54669e0da0726fe", + "sha256:22644c90e43d1a888477899af917979e17364fdd6e9bbb92679cd6a54c4d36c3", + "sha256:23eb3d47f78f509fcd201749b1f1e44b76f447913f7fbb3b8bae20f109086295", + "sha256:2744947b6c5e907af21133431809ccca535a037356864e32c122efed8cb9de1f", + "sha256:2b04844a9382f1bde4b4174e476e654ab3976168d2469cb4b29e352f4f35a5aa", + "sha256:2eea1db3748b2f37b4dce84d8e0c15d9bc811094807cabafe7b0ea47f424dfd5", + "sha256:41384c9ee18e61ef20cad2774ef71bd8854b63efce263b5177aa06fccb84df1f", + "sha256:449503213d142f8470b331a1c2f346f8457f16c7fe20f531bc2500e271f7c14c", + "sha256:45d2e6cf04d27286b6f73e6e20ba3f0a1f6d8f5535e5dcb1356200419bb457f4", + "sha256:46ae58e6926773e7315e9005f0f17aacedbc0895a8752bec087d24efa2f1fb21", + "sha256:4c28086df31478023a36f45e50767872ab3aed2419afff09814cb61c88b77db4", + "sha256:50739aaab0c8076ad5957204e71f2e0c9876e11fd8338f7f09de12c2d75163c5", + "sha256:52b185dfc3bf32e70929310367dbc66185afba60492a6a75a9b1141d407e160c", + "sha256:575535d039b97d63e6a9abee626d6c7cd47bd8cb73dd00a5c84a98254a2164a4", + "sha256:598c54318f0326cf5020aa43fc95a15e933aba4a71943d3bff2677d2d21ddfa1", + "sha256:5ad7c5691625a85327e5b683443baf73ae790fd5afc938252041ed5cd665e377", + "sha256:5c38006f7702d2ff52122e4c77a47348709374050c76216e84b30a9f06e45afa", + "sha256:5d7bdea33354b55acf40bb4dd3ba7324d6f1ef6b4a1a4da0807591f8c7e87b9a", + "sha256:5dbe1f7481dd14b6d477b4bace96d275090bc7636b9883975a08b802c94e7b78", + "sha256:63a273b70896d3640b7a883eb4a080c3c263d91662d870a2e9c84b7bbd978e7b", + "sha256:6abd4eb3ccb444383a40156139acc3aaa73745d395139cb6bc8e2a3429e1e627", + "sha256:7444fcab861911525470d398e5638b70d5cbea3b4674a3de92b5c58c5c515d4d", + "sha256:771c051c5ece27ad03e4f2e33624a925f0ad636c01757ab7dbb04a37964af4ba", + "sha256:941f8a5c31986053e75fa466bcfa743c2bf1b513b7978cf1f4ab4e96a8219d27", + "sha256:975ac5fb482c23f3608c16e06a43c8bab4d79c2e2564cdbc25cf753c6e998775", + "sha256:98209c438b38b6f1276dbc27b1c04e346a75bfaafe72a25a548f2dc5ce71d226", + "sha256:999823758e9eacd0095863d06cd6d388be769f80c9abb65cdb11c4f2cfce3fea", + "sha256:9a11bcf609d00cfc9baed77ab308223cabc1f0b22a05774a26dd4c94c0c80f1f", + "sha256:a01e8dcd0f041f6fa6d815c54a2017d032950e310c41d514a8bc041e872c4d12", + "sha256:a4991e5ee8a97ab791296d3bf7e8700b1445635cc1828cc98df945ca1802d7f2", + "sha256:a4fba5b339f4797548591036c9481e6895bf920fab7d3dc664d2697f8fb7c0bf", + "sha256:b76aead9b73f1650a091870fe4e9ed15ac4d8ed136f962042367255199c23594", + "sha256:b9c02c88c77ef6057c6cbeea8922d7c2424aabf46bfc40ddf42a32765ba91061", + "sha256:d03b645852d605f43003020e78fe6d573cae6ee6b944193e36b8b317e7549a20", + "sha256:d1924a6a943df7c73b9ef0048302327c75962b567451479710da729ead241228", + "sha256:d66a5d47eaa427039752fa0a83a425ff2a487b6a0ac30556fd3be2f3a27a0130", + "sha256:dd933b8e0b3c13fe3543d58f849a6a5e0d7987688cb6801834278378c724f695", + "sha256:e643cd14a5d1e59865cba68a5a6f0175d987f36c5f4cb0db80dee9ed60b4c174", + "sha256:ed1f27dc2b2262c8b8d9036276619c1bb18791311c16ccbf1f31b660f2aad7cf", + "sha256:f2b404bcae7e2ef9b0b9803b2a95119eb7507e6dc80ea4a64a78be052c30cebc", + "sha256:f309bdb33a61f8e049480d41498ee2e525cfb5e959958b326abfdf552bf9b9cb", + "sha256:f358effd3c11d66c150e0227f983d54a5cd30e14038566dadcf25f9f6844e6e8", + "sha256:fd5d47707bd6bc2b707ece765c362d2a1d2e8f6cd92b04c99fab49a929f3610c", + "sha256:fdd987a580b4474769adfd40144486f54bcc73838d5ec5d3647a17883ea78e76", + "sha256:fe71ca30aabe42591e84ecb9694c0297dc699cc20c5b24d2cb267fb0fc01f947" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.60.1" + "version": "==1.62.1" }, "importlib-metadata": { "hashes": [ - "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e", - "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc" + "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", + "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2" ], "markers": "python_version >= '3.8'", - "version": "==7.0.1" + "version": "==7.1.0" }, "isort": { "hashes": [ @@ -1022,20 +1015,20 @@ }, "pylint": { "hashes": [ - "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b", - "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810" + "sha256:507a5b60953874766d8a366e8e8c7af63e058b26345cfcb5f91f89d987fd6b74", + "sha256:6a69beb4a6f63debebaab0a3477ecd0f559aa726af4954fc948c51f7a2549e23" ], "index": "pypi", "markers": "python_full_version >= '3.8.0'", - "version": "==3.0.3" + "version": "==3.1.0" }, "setuptools": { "hashes": [ - "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401", - "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6" + "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", + "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" ], "markers": "python_version >= '3.8'", - "version": "==69.1.0" + "version": "==69.2.0" }, "tomli": { "hashes": [ @@ -1047,19 +1040,19 @@ }, "tomlkit": { "hashes": [ - "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4", - "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba" + "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b", + "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3" ], "markers": "python_version >= '3.7'", - "version": "==0.12.3" + "version": "==0.12.4" }, "virtualenv": { "hashes": [ - "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3", - "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b" + "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a", + "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197" ], "markers": "python_version >= '3.7'", - "version": "==20.25.0" + "version": "==20.25.1" }, "yapf": { "hashes": [ @@ -1072,11 +1065,11 @@ }, "zipp": { "hashes": [ - "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", - "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b", + "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715" ], "markers": "python_version >= '3.8'", - "version": "==3.17.0" + "version": "==3.18.1" } } } From 04a4005baeb159cf9e534869d4ac4c74fa13f1aa Mon Sep 17 00:00:00 2001 From: Oliver Chang Date: Thu, 4 Apr 2024 15:25:48 +1100 Subject: [PATCH 27/56] Add Wolfi feed to test. (#2086) --- osv/ecosystems/_ecosystems.py | 1 + source_test.yaml | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/osv/ecosystems/_ecosystems.py b/osv/ecosystems/_ecosystems.py index a192dffa676..027bd05a24b 100644 --- a/osv/ecosystems/_ecosystems.py +++ b/osv/ecosystems/_ecosystems.py @@ -59,6 +59,7 @@ 'Photon OS': OrderingUnsupportedEcosystem(), 'Rocky Linux': OrderingUnsupportedEcosystem(), 'Ubuntu': OrderingUnsupportedEcosystem(), + 'Wolfi': OrderingUnsupportedEcosystem(), } # Semver-based ecosystems, should correspond to _ecosystems above. diff --git a/source_test.yaml b/source_test.yaml index e042420232d..c61509e0356 100644 --- a/source_test.yaml +++ b/source_test.yaml @@ -283,4 +283,17 @@ link: 'https://github.com/cloudsecurityalliance/gsd-database/blob/main/' editable: False key_path: 'OSV' - repo_username: 'git' \ No newline at end of file + repo_username: 'git' + +- name: 'wolfi' + versions_from_repo: False + rest_api_url: 'https://packages.wolfi.dev/os/osv/all.json' + type: 2 + ignore_patterns: ['propertyValue'] + directory_path: 'os/osv' + detect_cherrypicks: False + extension: '.json' + db_prefix: 'WOLFI-' + ignore_git: True + link: 'https://packages.wolfi.dev/os/osv/' + editable: False From eb747f0567b33a3b3ec5ea6a600b61666813eaca Mon Sep 17 00:00:00 2001 From: Oliver Chang Date: Fri, 5 Apr 2024 10:19:36 +1100 Subject: [PATCH 28/56] Handle some edge cases in REST importer. (#2087) - Handle when Last-Modified is not returned by the server. - Handle first time runs when there is no last import date. --- docker/importer/importer.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/docker/importer/importer.py b/docker/importer/importer.py index 8cf7b82e4c2..c5a371b3839 100755 --- a/docker/importer/importer.py +++ b/docker/importer/importer.py @@ -459,7 +459,8 @@ def _process_updates_rest(self, source_repo: osv.SourceRepository): """Process updates from REST API.""" logging.info('Begin processing REST: %s', source_repo.name) - ignore_last_import_time = source_repo.ignore_last_import_time + ignore_last_import_time = ( + source_repo.ignore_last_import_time or not source_repo.last_update_date) if ignore_last_import_time: source_repo.ignore_last_import_time = False source_repo.put() @@ -468,13 +469,16 @@ def _process_updates_rest(self, source_repo: osv.SourceRepository): if request.status_code != 200: logging.error('Failed to fetch REST API: %s', request.status_code) return - last_modified = datetime.datetime.strptime(request.headers['Last-Modified'], - _HTTP_LAST_MODIFIED_FORMAT) - # Check whether endpoint has been modified since last update - if not ignore_last_import_time and (last_modified - < source_repo.last_update_date): - logging.info('No changes since last update.') - return + + if 'Last-Modified' in request.headers: + last_modified = datetime.datetime.strptime( + request.headers['Last-Modified'], _HTTP_LAST_MODIFIED_FORMAT) + # Check whether endpoint has been modified since last update + if not ignore_last_import_time and (last_modified + < source_repo.last_update_date): + logging.info('No changes since last update.') + return + request = requests.get(source_repo.rest_api_url, timeout=_TIMEOUT_SECONDS) # Parse vulns into Vulnerability objects from the REST API request. vulns = osv.parse_vulnerabilities_from_data( From 25be96ad461b2b76ee72380b7f51abdbba688a18 Mon Sep 17 00:00:00 2001 From: Holly Gong <39108850+hogo6002@users.noreply.github.com> Date: Mon, 8 Apr 2024 11:43:35 +1000 Subject: [PATCH 29/56] Add CVE conversion for Debian (#2076) Combining the full Debian Security Tracker (excludes `not yet assigned` and `end-of-life`) to our existing CVE entries to address potential data gaps in OSV.dev. Adding an `ecosystem_specific` field to indicate the urgency, such as `unimportant`. --- deployment/build-and-stage.yaml | 16 ++ .../oss-vdb-test/debian-cve-convert.yaml | 35 ++++ .../oss-vdb-test/kustomization.yaml | 1 + deployment/deploy-prod.yaml | 2 + vulnfeeds/build_and_deploy.sh | 2 + vulnfeeds/cloudbuild.yaml | 4 + vulnfeeds/cmd/combine-to-osv/main_test.go | 9 +- vulnfeeds/cmd/debian/Dockerfile | 34 ++++ .../cmd/debian/debian_security_tracker.go | 17 ++ vulnfeeds/cmd/debian/main.go | 176 +++++++++++++++++ vulnfeeds/cmd/debian/main_test.go | 44 +++++ vulnfeeds/cmd/debian/run_debian_convert.sh | 20 ++ .../debian/debian_security_tracker_mock.json | 184 ++++++++++++++++++ .../nvdcve-2.0/CVE-2018-1000500.json | 1 + .../parts/debian/CVE-2016-1585.debian.json | 40 ++++ .../parts/debian/CVE-2018-1000500.debian.json | 34 ++++ vulnfeeds/vulns/vulns.go | 17 +- 17 files changed, 625 insertions(+), 11 deletions(-) create mode 100644 deployment/clouddeploy/gke-workers/environments/oss-vdb-test/debian-cve-convert.yaml create mode 100644 vulnfeeds/cmd/debian/Dockerfile create mode 100644 vulnfeeds/cmd/debian/debian_security_tracker.go create mode 100644 vulnfeeds/cmd/debian/main.go create mode 100644 vulnfeeds/cmd/debian/main_test.go create mode 100644 vulnfeeds/cmd/debian/run_debian_convert.sh create mode 100644 vulnfeeds/test_data/debian/debian_security_tracker_mock.json create mode 100644 vulnfeeds/test_data/nvdcve-2.0/CVE-2018-1000500.json create mode 100644 vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json create mode 100644 vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json diff --git a/deployment/build-and-stage.yaml b/deployment/build-and-stage.yaml index 6deb1571792..b0b79ffbd8b 100644 --- a/deployment/build-and-stage.yaml +++ b/deployment/build-and-stage.yaml @@ -123,6 +123,20 @@ steps: args: ['push', '--all-tags', 'gcr.io/oss-vdb/alpine-cve-convert'] waitFor: ['build-alpine-cve-convert', 'cloud-build-queue'] +- name: 'gcr.io/cloud-builders/docker' + entrypoint: 'bash' + args: ['-c', 'docker pull gcr.io/oss-vdb/debian-cve-convert:latest || exit 0'] + id: 'pull-debian-cve-convert' + waitFor: ['setup'] +- name: gcr.io/cloud-builders/docker + args: ['build', '-t', 'gcr.io/oss-vdb/debian-cve-convert:latest', '-t', 'gcr.io/oss-vdb/debian-cve-convert:$COMMIT_SHA', '-f', 'cmd/alpine/Dockerfile', '--cache-from', 'gcr.io/oss-vdb/debian-cve-convert:latest', '--pull', '.'] + dir: 'vulnfeeds' + id: 'build-debian-cve-convert' + waitFor: ['pull-debian-cve-convert'] +- name: gcr.io/cloud-builders/docker + args: ['push', '--all-tags', 'gcr.io/oss-vdb/debian-cve-convert'] + waitFor: ['build-debian-cve-convert', 'cloud-build-queue'] + - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull gcr.io/oss-vdb/combine-to-osv:latest || exit 0'] @@ -263,6 +277,7 @@ steps: debian-convert=gcr.io/oss-vdb/debian-convert:$COMMIT_SHA,\ combine-to-osv=gcr.io/oss-vdb/combine-to-osv:$COMMIT_SHA,\ alpine-cve-convert=gcr.io/oss-vdb/alpine-cve-convert:$COMMIT_SHA,\ + debian-cve-convert=gcr.io/oss-vdb/debian-cve-convert:$COMMIT_SHA,\ debian-copyright-mirror=gcr.io/oss-vdb/debian-copyright-mirror:$COMMIT_SHA,\ cpe-repo-gen=gcr.io/oss-vdb/cpe-repo-gen:$COMMIT_SHA,\ nvd-cve-osv=gcr.io/oss-vdb/nvd-cve-osv:$COMMIT_SHA,\ @@ -312,6 +327,7 @@ images: - 'gcr.io/oss-vdb/alias-computation:$COMMIT_SHA' - 'gcr.io/oss-vdb/cron:$COMMIT_SHA' - 'gcr.io/oss-vdb/alpine-cve-convert:$COMMIT_SHA' +- 'gcr.io/oss-vdb/debian-cve-convert:$COMMIT_SHA' - 'gcr.io/oss-vdb/combine-to-osv:$COMMIT_SHA' - 'gcr.io/oss-vdb/indexer:$COMMIT_SHA' - 'gcr.io/oss-vdb/debian-convert:$COMMIT_SHA' diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/debian-cve-convert.yaml b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/debian-cve-convert.yaml new file mode 100644 index 00000000000..42ccfa62b76 --- /dev/null +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/debian-cve-convert.yaml @@ -0,0 +1,35 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: debian-cve-convert +spec: + schedule: "0 */1 * * *" + concurrencyPolicy: Forbid + jobTemplate: + spec: + activeDeadlineSeconds: 3600 + template: + spec: + containers: + - name: debian-cve-convert + image: debian-cve-convert + imagePullPolicy: Always + env: + - name: GOOGLE_CLOUD_PROJECT + value: oss-vdb-test + - name: OUTPUT_GCS_BUCKET + value: osv-test-cve-osv-conversion + securityContext: + privileged: true + resources: + requests: + cpu: 1 + memory: "1G" + limits: + cpu: 1 + memory: "2G" + restartPolicy: OnFailure + volumes: + - name: "ssd" + hostPath: + path: "/mnt/disks/ssd0" diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/kustomization.yaml b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/kustomization.yaml index 46ccd1ea84d..6f9eb7fa243 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/kustomization.yaml +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/kustomization.yaml @@ -1,5 +1,6 @@ resources: - ../../base +- debian-cve-convert.yaml patches: - path: workers.yaml - path: scaler.yaml diff --git a/deployment/deploy-prod.yaml b/deployment/deploy-prod.yaml index 7d789397abc..52e1382bb5c 100644 --- a/deployment/deploy-prod.yaml +++ b/deployment/deploy-prod.yaml @@ -36,6 +36,8 @@ steps: args: ['container', 'images', 'add-tag', '--quiet', 'gcr.io/oss-vdb/exporter:$COMMIT_SHA', 'gcr.io/oss-vdb/exporter:$TAG_NAME'] - name: gcr.io/cloud-builders/gcloud args: ['container', 'images', 'add-tag', '--quiet', 'gcr.io/oss-vdb/alpine-cve-convert:$COMMIT_SHA', 'gcr.io/oss-vdb/alpine-cve-convert:$TAG_NAME'] +- name: gcr.io/cloud-builders/gcloud + args: ['container', 'images', 'add-tag', '--quiet', 'gcr.io/oss-vdb/debian-cve-convert:$COMMIT_SHA', 'gcr.io/oss-vdb/debian-cve-convert:$TAG_NAME'] - name: gcr.io/cloud-builders/gcloud args: ['container', 'images', 'add-tag', '--quiet', 'gcr.io/oss-vdb/combine-to-osv:$COMMIT_SHA', 'gcr.io/oss-vdb/combine-to-osv:$TAG_NAME'] - name: gcr.io/cloud-builders/gcloud diff --git a/vulnfeeds/build_and_deploy.sh b/vulnfeeds/build_and_deploy.sh index 1d0ce7d3741..15f2ca29f2a 100755 --- a/vulnfeeds/build_and_deploy.sh +++ b/vulnfeeds/build_and_deploy.sh @@ -6,6 +6,7 @@ set -x cd "$(dirname "$0")" docker build -t gcr.io/oss-vdb/alpine-cve-convert -f cmd/alpine/Dockerfile . +docker build -t gcr.io/oss-vdb/debian-cve-convert -f cmd/debian/Dockerfile . docker build -t gcr.io/oss-vdb/combine-to-osv -f cmd/combine-to-osv/Dockerfile . docker build -t gcr.io/oss-vdb/debian-copyright-mirror -f cmd/debian-copyright-mirror/Dockerfile . docker build -t gcr.io/oss-vdb/cpe-repo-gen -f cmd/cpe-repo-gen/Dockerfile . @@ -13,6 +14,7 @@ docker build -t gcr.io/oss-vdb/cpe-repo-gen -f cmd/cpe-repo-gen/Dockerfile . if [ "$1" = "deploy" ] then docker push gcr.io/oss-vdb/alpine-cve-convert:latest + docker push gcr.io/oss-vdb/debian-cve-convert:latest docker push gcr.io/oss-vdb/combine-to-osv:latest docker push gcr.io/oss-vdb/debian-copyright-mirror:latest docker push gcr.io/oss-vdb/cpe-repo-gen:latest diff --git a/vulnfeeds/cloudbuild.yaml b/vulnfeeds/cloudbuild.yaml index 9400540b5b1..eb5b7a3b757 100644 --- a/vulnfeeds/cloudbuild.yaml +++ b/vulnfeeds/cloudbuild.yaml @@ -1,10 +1,14 @@ steps: - name: gcr.io/cloud-builders/docker args: [ 'build', '-t', 'gcr.io/oss-vdb/alpine-cve-convert', '-f', 'cmd/alpine/Dockerfile', '.' ] +- name: gcr.io/cloud-builders/docker + args: [ 'build', '-t', 'gcr.io/oss-vdb/debian-cve-convert', '-f', 'cmd/debian/Dockerfile', '.' ] - name: gcr.io/cloud-builders/docker args: [ 'build', '-t', 'gcr.io/oss-vdb/combine-to-osv', '-f', 'cmd/combine-to-osv/Dockerfile', '.' ] - name: gcr.io/cloud-builders/docker args: [ 'push', 'gcr.io/oss-vdb/alpine-cve-convert' ] +- name: gcr.io/cloud-builders/docker + args: [ 'push', 'gcr.io/oss-vdb/debian-cve-convert' ] - name: gcr.io/cloud-builders/docker args: [ 'push', 'gcr.io/oss-vdb/combine-to-osv' ] serviceAccount: 'projects/oss-vdb/serviceAccounts/deployment@oss-vdb.iam.gserviceaccount.com' diff --git a/vulnfeeds/cmd/combine-to-osv/main_test.go b/vulnfeeds/cmd/combine-to-osv/main_test.go index 72978539c83..62d2e8e05b0 100644 --- a/vulnfeeds/cmd/combine-to-osv/main_test.go +++ b/vulnfeeds/cmd/combine-to-osv/main_test.go @@ -35,7 +35,7 @@ func loadTestData2(cveName string) cves.Vulnerability { func TestLoadParts(t *testing.T) { allParts := loadParts("../../test_data/parts") - expectedPartCount := 12 + expectedPartCount := 14 actualPartCount := len(allParts) if actualPartCount != expectedPartCount { @@ -83,14 +83,15 @@ func TestLoadParts(t *testing.T) { func TestCombineIntoOSV(t *testing.T) { cveStuff := map[cves.CVEID]cves.Vulnerability{ - "CVE-2022-33745": loadTestData2("CVE-2022-33745"), - "CVE-2022-32746": loadTestData2("CVE-2022-32746"), + "CVE-2022-33745": loadTestData2("CVE-2022-33745"), + "CVE-2022-32746": loadTestData2("CVE-2022-32746"), + "CVE-2018-1000500": loadTestData2("CVE-2018-1000500"), } allParts := loadParts("../../test_data/parts") combinedOSV := combineIntoOSV(cveStuff, allParts, "") - expectedCombined := 2 + expectedCombined := 3 actualCombined := len(combinedOSV) if actualCombined != expectedCombined { diff --git a/vulnfeeds/cmd/debian/Dockerfile b/vulnfeeds/cmd/debian/Dockerfile new file mode 100644 index 00000000000..079b529c4fa --- /dev/null +++ b/vulnfeeds/cmd/debian/Dockerfile @@ -0,0 +1,34 @@ +# Copyright 2024 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 +# +# http://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. + +FROM golang:1.22.1-alpine@sha256:5a99b4049412cd34ad6b4e0c9527ae6beb9ae82d787b4bf3f4eff7aa13fc577a AS GO_BUILD + +RUN mkdir /src +WORKDIR /src + +COPY ./go.mod /src/go.mod +COPY ./go.sum /src/go.sum +RUN go mod download + +COPY ./ /src/ +RUN go build -o debian-osv ./cmd/debian/ + + +FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:alpine + +WORKDIR /root/ +COPY --from=GO_BUILD /src/debian-osv ./ +COPY ./cmd/debian/run_debian_convert.sh ./ + +ENTRYPOINT ["/root/run_debian_convert.sh"] diff --git a/vulnfeeds/cmd/debian/debian_security_tracker.go b/vulnfeeds/cmd/debian/debian_security_tracker.go new file mode 100644 index 00000000000..e84019302b7 --- /dev/null +++ b/vulnfeeds/cmd/debian/debian_security_tracker.go @@ -0,0 +1,17 @@ +package main + +type Release struct { + Status string `json:"status"` + Repositories map[string]string `json:"repositories"` + FixedVersion string `json:"fixed_version"` + Urgency string `json:"urgency"` +} + +type CVE struct { + Description string `json:"description"` + DebianBug int + Scope string `json:"scope"` + Releases map[string]Release `json:"releases"` +} + +type DebianSecurityTrackerData map[string]map[string]CVE diff --git a/vulnfeeds/cmd/debian/main.go b/vulnfeeds/cmd/debian/main.go new file mode 100644 index 00000000000..b1f1f9c0758 --- /dev/null +++ b/vulnfeeds/cmd/debian/main.go @@ -0,0 +1,176 @@ +package main + +import ( + "encoding/csv" + "encoding/json" + "net/http" + "os" + "path" + + "github.com/google/osv/vulnfeeds/cves" + "github.com/google/osv/vulnfeeds/utility" + "github.com/google/osv/vulnfeeds/vulns" +) + +const ( + debianOutputPathDefault = "parts/debian" + debianDistroInfoURL = "https://debian.pages.debian.net/distro-info-data/debian.csv" + debianSecurityTrackerURL = "https://security-tracker.debian.org/tracker/data/json" +) + +var Logger utility.LoggerWrapper + +func main() { + var logCleanup func() + Logger, logCleanup = utility.CreateLoggerWrapper("debian-osv") + defer logCleanup() + + err := os.MkdirAll(debianOutputPathDefault, 0755) + if err != nil { + Logger.Fatalf("Can't create output path: %s", err) + } + + debianData, err := downloadDebianSecurityTracker() + if err != nil { + Logger.Fatalf("Failed to download/parse Debian Security Tracker json file: %s", err) + } + + debianReleaseMap, err := getDebianReleaseMap() + if err != nil { + Logger.Fatalf("Failed to get Debian distro info data: %s", err) + } + + cvePkgInfos := generateDebianSecurityTrackerOSV(debianData, debianReleaseMap) + if err = writeToOutput(cvePkgInfos); err != nil { + Logger.Fatalf("Failed to write OSV output file: %s", err) + } +} + +// getDebianReleaseMap gets the Debian version number, excluding testing and experimental versions. +func getDebianReleaseMap() (map[string]string, error) { + releaseMap := make(map[string]string) + res, err := http.Get(debianDistroInfoURL) + if err != nil { + return releaseMap, err + } + defer res.Body.Close() + + reader := csv.NewReader(res.Body) + reader.FieldsPerRecord = -1 + data, err := reader.ReadAll() + if err != nil { + return releaseMap, err + } + + versionIndex := -1 + seriesIndex := -1 + + // Get the index number of version and series. + for i, col := range data[0] { + if col == "version" { + versionIndex = i + } else if col == "series" { + seriesIndex = i + } + } + + if seriesIndex == -1 || versionIndex == -1 { + return releaseMap, err + } + + for _, row := range data[1:] { + if row[seriesIndex] == "experimental" || row[seriesIndex] == "sid" { + continue + } + + releaseMap[row[seriesIndex]] = row[versionIndex] + } + + return releaseMap, err +} + +// updateOSVPkgInfos adds new release entries to osvPkgInfos. +func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release, osvPkgInfos map[string][]vulns.PackageInfo, debianReleaseMap map[string]string) { + var pkgInfos []vulns.PackageInfo + if value, ok := osvPkgInfos[cveId]; ok { + pkgInfos = value + } + for releaseName, release := range releases { + // Skips 'not yet assigned' entries because their status may change in the future. + // For reference on urgency levels, see: https://security-team.debian.org/security_tracker.html#severity-levels + if release.Urgency == "not yet assigned" { + continue + } + debianVersion, ok := debianReleaseMap[releaseName] + if !ok { + continue + } + + pkgInfo := vulns.PackageInfo{ + PkgName: pkgName, + Ecosystem: "Debian:" + debianVersion, + } + pkgInfo.EcosystemSpecific = make(map[string]string) + + if release.Status == "resolved" { + if release.FixedVersion == "0" { // not affected + continue + } + pkgInfo.VersionInfo = cves.VersionInfo{ + AffectedVersions: []cves.AffectedVersion{{Fixed: release.FixedVersion}}, + } + } + pkgInfo.EcosystemSpecific["urgency"] = release.Urgency + pkgInfos = append(pkgInfos, pkgInfo) + } + if pkgInfos != nil { + osvPkgInfos[cveId] = pkgInfos + } +} + +// generateDebianSecurityTrackerOSV converts Debian Security Tracker entries to OSV PackageInfo format. +func generateDebianSecurityTrackerOSV(debianData DebianSecurityTrackerData, debianReleaseMap map[string]string) map[string][]vulns.PackageInfo { + osvPkgInfos := make(map[string][]vulns.PackageInfo) + for pkgName, pkg := range debianData { + for cveId, cve := range pkg { + updateOSVPkgInfos(pkgName, cveId, cve.Releases, osvPkgInfos, debianReleaseMap) + } + } + + return osvPkgInfos +} + +func writeToOutput(cvePkgInfos map[string][]vulns.PackageInfo) error { + for cveId := range cvePkgInfos { + pkgInfos := cvePkgInfos[cveId] + file, err := os.OpenFile(path.Join(debianOutputPathDefault, cveId+".debian.json"), os.O_CREATE|os.O_RDWR, 0644) + if err != nil { + return err + } + encoder := json.NewEncoder(file) + encoder.SetIndent("", " ") + err = encoder.Encode(&pkgInfos) + if err != nil { + return err + } + _ = file.Close() + } + + return nil +} + +// downloadDebianSecurityTracker download Debian json file +func downloadDebianSecurityTracker() (DebianSecurityTrackerData, error) { + res, err := http.Get(debianSecurityTrackerURL) + if err != nil { + return nil, err + } + + var decodedDebianData DebianSecurityTrackerData + + if err := json.NewDecoder(res.Body).Decode(&decodedDebianData); err != nil { + return nil, err + } + + return decodedDebianData, err +} diff --git a/vulnfeeds/cmd/debian/main_test.go b/vulnfeeds/cmd/debian/main_test.go new file mode 100644 index 00000000000..50af4ac959c --- /dev/null +++ b/vulnfeeds/cmd/debian/main_test.go @@ -0,0 +1,44 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "os" + "testing" + + "github.com/google/osv/vulnfeeds/vulns" +) + +func Test_generateDebianSecurityTrackerOSV(t *testing.T) { + var decodedDebianData DebianSecurityTrackerData + + file, _ := os.Open("../../test_data/debian/debian_security_tracker_mock.json") + defer file.Close() + _ = json.NewDecoder(file).Decode(&decodedDebianData) + + debianReleaseMap := make(map[string]string) + debianReleaseMap["buster"] = "10" + debianReleaseMap["bullseye"] = "11" + debianReleaseMap["bookworm"] = "12" + debianReleaseMap["trixie"] = "13" + debianReleaseMap["forky"] = "14" + + osvPkgInfos := generateDebianSecurityTrackerOSV(decodedDebianData, debianReleaseMap) + expectedCount := 2 + if len(osvPkgInfos) != expectedCount { + t.Errorf("Expected %v Debian OSV entries , got %v", expectedCount, osvPkgInfos) + } + for cveId, pkgInfos := range osvPkgInfos { + file, err := os.Open(fmt.Sprintf("../../test_data/parts/debian/%s.debian.json", cveId)) + if err != nil { + t.Errorf("../../test_data/parts/debian/%s.debian.json doesn't exist", cveId) + } + expectedResult, _ := io.ReadAll(file) + var expectedPackageInfos []vulns.PackageInfo + json.Unmarshal(expectedResult, &expectedPackageInfos) + if len(pkgInfos) != len(expectedPackageInfos) || pkgInfos[0].EcosystemSpecific["urgency"] != expectedPackageInfos[0].EcosystemSpecific["urgency"] { + t.Errorf("Expected Debian OSV data %v, got %v", expectedPackageInfos, pkgInfos) + } + } +} diff --git a/vulnfeeds/cmd/debian/run_debian_convert.sh b/vulnfeeds/cmd/debian/run_debian_convert.sh new file mode 100644 index 00000000000..a5dc0092fca --- /dev/null +++ b/vulnfeeds/cmd/debian/run_debian_convert.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +## Converts alpine security advisory into general affected package information +## Then uploads the results to google cloud store. +## +## This script is intended to be the entrypoint of the docker image. +## with the working directory being the root of the repository + +set -e + +OSV_PARTS_OUTPUT="parts/debian" +OUTPUT_BUCKET="${OUTPUT_GCS_BUCKET:=cve-osv-conversion}" + +echo "Setup initial directories" +rm -rf $OSV_PARTS_OUTPUT && mkdir -p $OSV_PARTS_OUTPUT + +./debian-osv +echo "Begin Syncing with cloud" +gsutil -q -m rsync -c -d $OSV_PARTS_OUTPUT "gs://$OUTPUT_BUCKET/$OSV_PARTS_OUTPUT" +echo "Successfully synced with cloud" diff --git a/vulnfeeds/test_data/debian/debian_security_tracker_mock.json b/vulnfeeds/test_data/debian/debian_security_tracker_mock.json new file mode 100644 index 00000000000..f3641935ee7 --- /dev/null +++ b/vulnfeeds/test_data/debian/debian_security_tracker_mock.json @@ -0,0 +1,184 @@ +{ + "busybox": { + "CVE-2018-1000500": { + "description": "Busybox contains a Missing SSL certificate validation vulnerability in The \"busybox wget\" applet that can result in arbitrary code execution. This attack appear to be exploitable via Simply download any file over HTTPS using \"busybox wget https://compromised-domain.com/important-file\".", + "scope": "local", + "releases": { + "bookworm": { + "status": "open", + "repositories": { + "bookworm": "1:1.35.0-4" + }, + "urgency": "unimportant" + }, + "bullseye": { + "status": "open", + "repositories": { + "bullseye": "1:1.30.1-6" + }, + "urgency": "unimportant" + }, + "buster": { + "status": "open", + "repositories": { + "buster": "1:1.30.1-4" + }, + "urgency": "end-of-life" + }, + "sid": { + "status": "open", + "repositories": { + "sid": "1:1.36.1-6" + }, + "urgency": "unimportant" + }, + "trixie": { + "status": "open", + "repositories": { + "trixie": "1:1.36.1-6" + }, + "urgency": "unimportant" + } + } + } + }, + "apparmor": { + "CVE-2014-1424": { + "description": "apparmor_parser in the apparmor package before 2.8.95~2430-0ubuntu5.1 in Ubuntu 14.04 allows attackers to bypass AppArmor policies via unspecified vectors, related to a \"miscompilation flaw.\"", + "scope": "local", + "releases": { + "bookworm": { + "status": "resolved", + "repositories": { + "bookworm": "3.0.8-3" + }, + "fixed_version": "0", + "urgency": "unimportant" + }, + "bullseye": { + "status": "resolved", + "repositories": { + "bullseye": "2.13.6-10" + }, + "fixed_version": "0", + "urgency": "unimportant" + }, + "buster": { + "status": "resolved", + "repositories": { + "buster": "2.13.2-10" + }, + "fixed_version": "0", + "urgency": "unimportant" + }, + "sid": { + "status": "resolved", + "repositories": { + "sid": "3.0.12-1" + }, + "fixed_version": "0", + "urgency": "unimportant" + }, + "trixie": { + "status": "resolved", + "repositories": { + "trixie": "3.0.12-1" + }, + "fixed_version": "0", + "urgency": "unimportant" + } + } + }, + "CVE-2016-1585": { + "description": "In all versions of AppArmor mount rules are accidentally widened when compiled.", + "debianbug": 929990, + "scope": "local", + "releases": { + "bookworm": { + "status": "open", + "repositories": { + "bookworm": "3.0.8-3" + }, + "urgency": "unimportant" + }, + "bullseye": { + "status": "open", + "repositories": { + "bullseye": "2.13.6-10" + }, + "urgency": "unimportant" + }, + "buster": { + "status": "open", + "repositories": { + "buster": "2.13.2-10" + }, + "urgency": "unimportant" + }, + "sid": { + "status": "resolved", + "repositories": { + "sid": "3.0.12-1" + }, + "fixed_version": "3.0.12-1", + "urgency": "unimportant" + }, + "trixie": { + "status": "resolved", + "repositories": { + "trixie": "3.0.12-1" + }, + "fixed_version": "3.0.12-1", + "urgency": "unimportant" + } + } + }, + "CVE-2017-6507": { + "description": "An issue was discovered in AppArmor before 2.12. Incorrect handling of unknown AppArmor profiles in AppArmor init scripts, upstart jobs, and/or systemd unit files allows an attacker to possibly have increased attack surfaces of processes that were intended to be confined by AppArmor. This is due to the common logic to handle 'restart' operations removing AppArmor profiles that aren't found in the typical filesystem locations, such as /etc/apparmor.d/. Userspace projects that manage their own AppArmor profiles in atypical directories, such as what's done by LXD and Docker, are affected by this flaw in the AppArmor init script logic.", + "debianbug": 858768, + "scope": "local", + "releases": { + "bookworm": { + "status": "resolved", + "repositories": { + "bookworm": "3.0.8-3" + }, + "fixed_version": "2.11.0-3", + "urgency": "not yet assigned" + }, + "bullseye": { + "status": "resolved", + "repositories": { + "bullseye": "2.13.6-10" + }, + "fixed_version": "2.11.0-3", + "urgency": "not yet assigned" + }, + "buster": { + "status": "resolved", + "repositories": { + "buster": "2.13.2-10" + }, + "fixed_version": "2.11.0-3", + "urgency": "not yet assigned" + }, + "sid": { + "status": "resolved", + "repositories": { + "sid": "3.0.12-1" + }, + "fixed_version": "2.11.0-3", + "urgency": "not yet assigned" + }, + "trixie": { + "status": "resolved", + "repositories": { + "trixie": "3.0.12-1" + }, + "fixed_version": "2.11.0-3", + "urgency": "not yet assigned" + } + } + } + } +} \ No newline at end of file diff --git a/vulnfeeds/test_data/nvdcve-2.0/CVE-2018-1000500.json b/vulnfeeds/test_data/nvdcve-2.0/CVE-2018-1000500.json new file mode 100644 index 00000000000..a3d9fb0768f --- /dev/null +++ b/vulnfeeds/test_data/nvdcve-2.0/CVE-2018-1000500.json @@ -0,0 +1 @@ +{"resultsPerPage":1,"startIndex":0,"totalResults":1,"format":"NVD_CVE","version":"2.0","timestamp":"2024-03-25T05:17:38.960","vulnerabilities":[{"cve":{"id":"CVE-2018-1000500","sourceIdentifier":"cve@mitre.org","published":"2018-06-26T16:29:00.353","lastModified":"2020-09-24T20:15:12.350","vulnStatus":"Modified","descriptions":[{"lang":"en","value":"Busybox contains a Missing SSL certificate validation vulnerability in The \"busybox wget\" applet that can result in arbitrary code execution. This attack appear to be exploitable via Simply download any file over HTTPS using \"busybox wget https:\/\/compromised-domain.com\/important-file\"."},{"lang":"es","value":"Busybox contiene una vulnerabilidad de falta de validaciΓ³n de certificados SSL en el applet \"busybox wget\" que puede resultar en la ejecuciΓ³n de cΓ³digo arbitrario. El ataque parece ser explotable mediante la descarga de cualquier archivo por HTTPS mediante \"busybox wget https:\/\/compromised-domain.com\/important-file\"."}],"metrics":{"cvssMetricV31":[{"source":"nvd@nist.gov","type":"Primary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1\/AV:N\/AC:H\/PR:N\/UI:N\/S:U\/C:H\/I:H\/A:H","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"NONE","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH","baseScore":8.1,"baseSeverity":"HIGH"},"exploitabilityScore":2.2,"impactScore":5.9}],"cvssMetricV2":[{"source":"nvd@nist.gov","type":"Primary","cvssData":{"version":"2.0","vectorString":"AV:N\/AC:M\/Au:N\/C:P\/I:P\/A:P","accessVector":"NETWORK","accessComplexity":"MEDIUM","authentication":"NONE","confidentialityImpact":"PARTIAL","integrityImpact":"PARTIAL","availabilityImpact":"PARTIAL","baseScore":6.8},"baseSeverity":"MEDIUM","exploitabilityScore":8.6,"impactScore":6.4,"acInsufInfo":false,"obtainAllPrivilege":false,"obtainUserPrivilege":false,"obtainOtherPrivilege":false,"userInteractionRequired":false}]},"weaknesses":[{"source":"nvd@nist.gov","type":"Primary","description":[{"lang":"en","value":"CWE-295"}]}],"configurations":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:a:busybox:busybox:*:*:*:*:*:*:*:*","versionEndExcluding":"1.32.0","matchCriteriaId":"8E01D2F2-60BE-4135-B94B-76D34EC75060"}]}]}],"references":[{"url":"http:\/\/lists.busybox.net\/pipermail\/busybox\/2018-May\/086462.html","source":"cve@mitre.org","tags":["Mailing List","Vendor Advisory"]},{"url":"https:\/\/git.busybox.net\/busybox\/commit\/?id=45fa3f18adf57ef9d743038743d9c90573aeeb91","source":"cve@mitre.org","tags":["Patch","Vendor Advisory"]},{"url":"https:\/\/usn.ubuntu.com\/4531-1\/","source":"cve@mitre.org"}]}}]} \ No newline at end of file diff --git a/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json b/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json new file mode 100644 index 00000000000..9bb8f68d76a --- /dev/null +++ b/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json @@ -0,0 +1,40 @@ +[ + { + "pkg_name": "apparmor", + "ecosystem": "Debian12", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + }, + { + "pkg_name": "apparmor", + "ecosystem": "Debian11", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + }, + { + "pkg_name": "apparmor", + "ecosystem": "Debian10", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + }, + { + "pkg_name": "apparmor", + "ecosystem": "Debian13", + "fixed_version": { + "affected_versions": [ + { + "fixed": "3.0.12-1" + } + ] + }, + "ecosystem_specific": { + "urgency": "unimportant" + } + } +] \ No newline at end of file diff --git a/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json b/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json new file mode 100644 index 00000000000..918345b3986 --- /dev/null +++ b/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json @@ -0,0 +1,34 @@ +[ + { + "pkg_name": "busybox", + "ecosystem": "Debian10", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + }, + { + "pkg_name": "busybox", + "ecosystem": "Debian13", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + }, + { + "pkg_name": "busybox", + "ecosystem": "Debian12", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + }, + { + "pkg_name": "busybox", + "ecosystem": "Debian11", + "fixed_version": {}, + "ecosystem_specific": { + "urgency": "unimportant" + } + } +] diff --git a/vulnfeeds/vulns/vulns.go b/vulnfeeds/vulns/vulns.go index 664b49864ad..545ec1a75c4 100644 --- a/vulnfeeds/vulns/vulns.go +++ b/vulnfeeds/vulns/vulns.go @@ -60,9 +60,10 @@ type Severity struct { } type Affected struct { - Package *AffectedPackage `json:"package,omitempty"` - Ranges []AffectedRange `json:"ranges" yaml:"ranges"` - Versions []string `json:"versions,omitempty" yaml:"versions,omitempty"` + Package *AffectedPackage `json:"package,omitempty"` + Ranges []AffectedRange `json:"ranges" yaml:"ranges"` + Versions []string `json:"versions,omitempty" yaml:"versions,omitempty"` + EcosystemSpecific map[string]string `json:"ecosystem_specific,omitempty" yaml:"ecosystem_specific,omitempty"` } // AttachExtractedVersionInfo converts the cves.VersionInfo struct to OSV GIT and ECOSYSTEM AffectedRanges and AffectedPackage. @@ -163,10 +164,11 @@ func (affected *Affected) AttachExtractedVersionInfo(version cves.VersionInfo) { // PackageInfo is an intermediate struct to ease generating Vulnerability structs. type PackageInfo struct { - PkgName string `json:"pkg_name,omitempty" yaml:"pkg_name,omitempty"` - Ecosystem string `json:"ecosystem,omitempty" yaml:"ecosystem,omitempty"` - PURL string `json:"purl,omitempty" yaml:"purl,omitempty"` - VersionInfo cves.VersionInfo `json:"fixed_version,omitempty" yaml:"fixed_version,omitempty"` + PkgName string `json:"pkg_name,omitempty" yaml:"pkg_name,omitempty"` + Ecosystem string `json:"ecosystem,omitempty" yaml:"ecosystem,omitempty"` + PURL string `json:"purl,omitempty" yaml:"purl,omitempty"` + VersionInfo cves.VersionInfo `json:"fixed_version,omitempty" yaml:"fixed_version,omitempty"` + EcosystemSpecific map[string]string `json:"ecosystem_specific,omitempty" yaml:"ecosystem_specific,omitempty"` } func (pi *PackageInfo) ToJSON(w io.Writer) error { @@ -300,6 +302,7 @@ func (v *Vulnerability) AddPkgInfo(pkgInfo PackageInfo) { return cmp.Compare(a.Repo, b.Repo) }) + affected.EcosystemSpecific = pkgInfo.EcosystemSpecific v.Affected = append(v.Affected, affected) } From 927c0cae0f153597bf533032f086442e99a17042 Mon Sep 17 00:00:00 2001 From: Oliver Chang Date: Tue, 9 Apr 2024 10:49:54 +1000 Subject: [PATCH 30/56] Try setting startup probe delay + timeout (#2092) Seeing if this fixes the deployment issues we're encountering. --- deployment/clouddeploy/osv-api/run.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deployment/clouddeploy/osv-api/run.yaml b/deployment/clouddeploy/osv-api/run.yaml index c5808229476..7efd896294c 100644 --- a/deployment/clouddeploy/osv-api/run.yaml +++ b/deployment/clouddeploy/osv-api/run.yaml @@ -16,6 +16,8 @@ spec: startupProbe: grpc: service: osv.v1.OSV + initialDelaySeconds: 5 + timeoutSeconds: 5 livenessProbe: grpc: service: osv.v1.OSV From 900148e960d9fdff4adf1d9f2dcf5cf4c6cf84d9 Mon Sep 17 00:00:00 2001 From: Holly Gong <39108850+hogo6002@users.noreply.github.com> Date: Tue, 9 Apr 2024 13:57:02 +1000 Subject: [PATCH 31/56] Fix Debian CVE conversion. (#2098) Fix `debian-cve-convert` docker image and add some logs --------- Co-authored-by: Andrew Pollock --- deployment/build-and-stage.yaml | 2 +- vulnfeeds/cmd/debian/main.go | 5 +++++ vulnfeeds/cmd/debian/run_debian_convert.sh | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/deployment/build-and-stage.yaml b/deployment/build-and-stage.yaml index b0b79ffbd8b..8a71b0a9ed4 100644 --- a/deployment/build-and-stage.yaml +++ b/deployment/build-and-stage.yaml @@ -129,7 +129,7 @@ steps: id: 'pull-debian-cve-convert' waitFor: ['setup'] - name: gcr.io/cloud-builders/docker - args: ['build', '-t', 'gcr.io/oss-vdb/debian-cve-convert:latest', '-t', 'gcr.io/oss-vdb/debian-cve-convert:$COMMIT_SHA', '-f', 'cmd/alpine/Dockerfile', '--cache-from', 'gcr.io/oss-vdb/debian-cve-convert:latest', '--pull', '.'] + args: ['build', '-t', 'gcr.io/oss-vdb/debian-cve-convert:latest', '-t', 'gcr.io/oss-vdb/debian-cve-convert:$COMMIT_SHA', '-f', 'cmd/debian/Dockerfile', '--cache-from', 'gcr.io/oss-vdb/debian-cve-convert:latest', '--pull', '.'] dir: 'vulnfeeds' id: 'build-debian-cve-convert' waitFor: ['pull-debian-cve-convert'] diff --git a/vulnfeeds/cmd/debian/main.go b/vulnfeeds/cmd/debian/main.go index b1f1f9c0758..f1011bdac5a 100644 --- a/vulnfeeds/cmd/debian/main.go +++ b/vulnfeeds/cmd/debian/main.go @@ -44,6 +44,8 @@ func main() { if err = writeToOutput(cvePkgInfos); err != nil { Logger.Fatalf("Failed to write OSV output file: %s", err) } + + Logger.Infof("Debian CVE conversion succeeded.") } // getDebianReleaseMap gets the Debian version number, excluding testing and experimental versions. @@ -130,6 +132,7 @@ func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release // generateDebianSecurityTrackerOSV converts Debian Security Tracker entries to OSV PackageInfo format. func generateDebianSecurityTrackerOSV(debianData DebianSecurityTrackerData, debianReleaseMap map[string]string) map[string][]vulns.PackageInfo { + Logger.Infof("Converting Debian Security Tracker data to OSV package infos.") osvPkgInfos := make(map[string][]vulns.PackageInfo) for pkgName, pkg := range debianData { for cveId, cve := range pkg { @@ -141,6 +144,7 @@ func generateDebianSecurityTrackerOSV(debianData DebianSecurityTrackerData, debi } func writeToOutput(cvePkgInfos map[string][]vulns.PackageInfo) error { + Logger.Infof("Writing package infos to the output.") for cveId := range cvePkgInfos { pkgInfos := cvePkgInfos[cveId] file, err := os.OpenFile(path.Join(debianOutputPathDefault, cveId+".debian.json"), os.O_CREATE|os.O_RDWR, 0644) @@ -172,5 +176,6 @@ func downloadDebianSecurityTracker() (DebianSecurityTrackerData, error) { return nil, err } + Logger.Infof("Successfully downloaded Debian Security Tracker Data.") return decodedDebianData, err } diff --git a/vulnfeeds/cmd/debian/run_debian_convert.sh b/vulnfeeds/cmd/debian/run_debian_convert.sh index a5dc0092fca..a5bc85f9446 100644 --- a/vulnfeeds/cmd/debian/run_debian_convert.sh +++ b/vulnfeeds/cmd/debian/run_debian_convert.sh @@ -11,10 +11,10 @@ set -e OSV_PARTS_OUTPUT="parts/debian" OUTPUT_BUCKET="${OUTPUT_GCS_BUCKET:=cve-osv-conversion}" -echo "Setup initial directories" +echo "Setup initial directories ${OSV_PARTS_OUTPUT}" rm -rf $OSV_PARTS_OUTPUT && mkdir -p $OSV_PARTS_OUTPUT ./debian-osv -echo "Begin Syncing with cloud" +echo "Begin Syncing with cloud, GCS bucket: ${OUTPUT_BUCKET}" gsutil -q -m rsync -c -d $OSV_PARTS_OUTPUT "gs://$OUTPUT_BUCKET/$OSV_PARTS_OUTPUT" echo "Successfully synced with cloud" From 1f06a664d08f36f5aecc4fcab7831412257e1c3b Mon Sep 17 00:00:00 2001 From: Michael Kedar Date: Tue, 9 Apr 2024 14:03:03 +1000 Subject: [PATCH 32/56] Use `< OR >` query in aliases to fix issue (#2094) Fixing issues with the `!=` operator, see #2093 --- docker/alias/alias_computation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker/alias/alias_computation.py b/docker/alias/alias_computation.py index 86b51b2bb03..f8cba508244 100755 --- a/docker/alias/alias_computation.py +++ b/docker/alias/alias_computation.py @@ -87,7 +87,9 @@ def main(): AliasGroups and creating new AliasGroups for un-computed bugs.""" # Query for all bugs that have aliases. - bugs = osv.Bug.query(osv.Bug.aliases != '') + # Use (> '' OR < '') instead of (!= '') / (> '') to de-duplicate results + # and avoid datastore emulator problems, see issue #2093 + bugs = osv.Bug.query(ndb.OR(osv.Bug.aliases > '', osv.Bug.aliases < '')) all_alias_group = osv.AliasGroup.query() allow_list = { allow_entry.bug_id for allow_entry in osv.AliasAllowListEntry.query() From ae034a880e4c66508e5bf35f8eee2570801b4fd5 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 9 Apr 2024 06:24:06 +0200 Subject: [PATCH 33/56] chore(deps): lock file maintenance (#2084) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- docker/worker/Pipfile.lock | 249 ++++++++++++++++++------------------- 1 file changed, 121 insertions(+), 128 deletions(-) diff --git a/docker/worker/Pipfile.lock b/docker/worker/Pipfile.lock index 2945dcf3204..04a81c68a47 100644 --- a/docker/worker/Pipfile.lock +++ b/docker/worker/Pipfile.lock @@ -26,11 +26,11 @@ }, "cachetools": { "hashes": [ - "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2", - "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1" + "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945", + "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105" ], "markers": "python_version >= '3.7'", - "version": "==5.3.2" + "version": "==5.3.3" }, "certifi": { "hashes": [ @@ -199,27 +199,27 @@ "grpc" ], "hashes": [ - "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e", - "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95" + "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6", + "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9" ], "markers": "python_version >= '3.7'", - "version": "==2.17.1" + "version": "==2.18.0" }, "google-auth": { "hashes": [ - "sha256:3cfc1b6e4e64797584fb53fc9bd0b7afa9b7c0dba2004fa7dcc9349e58cc3195", - "sha256:7634d29dcd1e101f5226a23cbc4a0c6cda6394253bf80e281d9c5c6797869c53" + "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360", + "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415" ], "markers": "python_version >= '3.7'", - "version": "==2.28.0" + "version": "==2.29.0" }, "google-cloud-appengine-logging": { "hashes": [ - "sha256:851dad2c4dd85dcf5b9e32879acda998a250e82c4d4f2bd5ef67b904840c7b17", - "sha256:9905c7c30c3c2bbedd0b132e2b271fc8247333ebc931d2d23af1bbbd11b435fe" + "sha256:8e30af51d853f219caf29e8b8b342b9ce8214b29f334dafae38d39aaaff7d372", + "sha256:fb504e6199fe8de85baa9d31cecf6776877851fe58867de603317ec7cc739987" ], "markers": "python_version >= '3.7'", - "version": "==1.4.1" + "version": "==1.4.3" }, "google-cloud-audit-log": { "hashes": [ @@ -247,38 +247,38 @@ }, "google-cloud-logging": { "hashes": [ - "sha256:094a2db068ff7f38c9e0c1017673fa49c0768fbae02769e03e06baa30f138b87", - "sha256:4decb1b0bed4a0e3c0e58a376646e6002d6be7cad039e3466822e8665072ea33" + "sha256:132192beb45731130a2ffbcd4b2b5cbd87370e7dcfa7397ae4002154f542bd20", + "sha256:d93d347351240ddb14cfe201987a2d32cf9d7f478b8b2fabed3015b425b3274f" ], "markers": "python_version >= '3.7'", - "version": "==3.9.0" + "version": "==3.10.0" }, "google-cloud-ndb": { "hashes": [ - "sha256:39268ab29244035f68d35177ebafc7c89760e956171b8495d2640050682c228e", - "sha256:a23fb6754ee8b8cd6b6a8bc9bd39cae858b9e8000882c1041f133429226e610b" + "sha256:3d6c8866681dc280ad9f90a6f5b556d324e4b29173d0b63ddf6b8e19655fec1a", + "sha256:a6a2f6c58bd14febb92c0e569ca6a4e1d14c4a70935c28f3681e33c67402428f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.2.2" + "version": "==2.3.1" }, "google-cloud-pubsub": { "hashes": [ - "sha256:5eddfb8f4eb26e2a25b9856ca1a65c5f2015e5c3e365e68df3b4f5d36809d9c2", - "sha256:a5f9280598f0c4a5819bb630a50c45dc8acda0c94afecae0a18368bccbfa2651" + "sha256:31fcf07444b7f813a616c4b650e1fbf1dc998a088fe0059a76164855ac17f05c", + "sha256:55a3602ec45bc09626604d712032288a8ee3566145cb83523cff908938f69a4b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.19.4" + "version": "==2.21.1" }, "google-cloud-storage": { "hashes": [ - "sha256:2d23fcf59b55e7b45336729c148bb1c464468c69d5efbaee30f7201dd90eb97e", - "sha256:8641243bbf2a2042c16a6399551fbb13f062cbc9a2de38d6c0bb5426962e9dbd" + "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852", + "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.14.0" + "version": "==2.16.0" }, "google-crc32c": { "hashes": [ @@ -367,11 +367,11 @@ "grpc" ], "hashes": [ - "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07", - "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277" + "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e", + "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632" ], "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.63.0" }, "grpc-google-iam-v1": { "hashes": [ @@ -383,71 +383,71 @@ }, "grpcio": { "hashes": [ - "sha256:0250a7a70b14000fa311de04b169cc7480be6c1a769b190769d347939d3232a8", - "sha256:069fe2aeee02dfd2135d562d0663fe70fbb69d5eed6eb3389042a7e963b54de8", - "sha256:082081e6a36b6eb5cf0fd9a897fe777dbb3802176ffd08e3ec6567edd85bc104", - "sha256:0c5807e9152eff15f1d48f6b9ad3749196f79a4a050469d99eecb679be592acc", - "sha256:14e8f2c84c0832773fb3958240c69def72357bc11392571f87b2d7b91e0bb092", - "sha256:2a6087f234cb570008a6041c8ffd1b7d657b397fdd6d26e83d72283dae3527b1", - "sha256:2bb2a2911b028f01c8c64d126f6b632fcd8a9ac975aa1b3855766c94e4107180", - "sha256:2f44c32aef186bbba254129cea1df08a20be414144ac3bdf0e84b24e3f3b2e05", - "sha256:30e980cd6db1088c144b92fe376747328d5554bc7960ce583ec7b7d81cd47287", - "sha256:33aed0a431f5befeffd9d346b0fa44b2c01aa4aeae5ea5b2c03d3e25e0071216", - "sha256:33bdea30dcfd4f87b045d404388469eb48a48c33a6195a043d116ed1b9a0196c", - "sha256:39aa848794b887120b1d35b1b994e445cc028ff602ef267f87c38122c1add50d", - "sha256:4216e67ad9a4769117433814956031cb300f85edc855252a645a9a724b3b6594", - "sha256:49c9b6a510e3ed8df5f6f4f3c34d7fbf2d2cae048ee90a45cd7415abab72912c", - "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87", - "sha256:50d56280b482875d1f9128ce596e59031a226a8b84bec88cb2bf76c289f5d0de", - "sha256:53b69e79d00f78c81eecfb38f4516080dc7f36a198b6b37b928f1c13b3c063e9", - "sha256:55ccb7db5a665079d68b5c7c86359ebd5ebf31a19bc1a91c982fd622f1e31ff2", - "sha256:5a1ebbae7e2214f51b1f23b57bf98eeed2cf1ba84e4d523c48c36d5b2f8829ff", - "sha256:61b7199cd2a55e62e45bfb629a35b71fc2c0cb88f686a047f25b1112d3810904", - "sha256:660fc6b9c2a9ea3bb2a7e64ba878c98339abaf1811edca904ac85e9e662f1d73", - "sha256:6d140bdeb26cad8b93c1455fa00573c05592793c32053d6e0016ce05ba267549", - "sha256:6e490fa5f7f5326222cb9f0b78f207a2b218a14edf39602e083d5f617354306f", - "sha256:6ecf21d20d02d1733e9c820fb5c114c749d888704a7ec824b545c12e78734d1c", - "sha256:70c83bb530572917be20c21f3b6be92cd86b9aecb44b0c18b1d3b2cc3ae47df0", - "sha256:72153a0d2e425f45b884540a61c6639436ddafa1829a42056aa5764b84108b8e", - "sha256:73e14acd3d4247169955fae8fb103a2b900cfad21d0c35f0dcd0fdd54cd60367", - "sha256:76eaaba891083fcbe167aa0f03363311a9f12da975b025d30e94b93ac7a765fc", - "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303", - "sha256:7d142bcd604166417929b071cd396aa13c565749a4c840d6c702727a59d835eb", - "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c", - "sha256:8d488fbdbf04283f0d20742b64968d44825617aa6717b07c006168ed16488804", - "sha256:91422ba785a8e7a18725b1dc40fbd88f08a5bb4c7f1b3e8739cab24b04fa8a03", - "sha256:9a66f4d2a005bc78e61d805ed95dedfcb35efa84b7bba0403c6d60d13a3de2d6", - "sha256:9b106bc52e7f28170e624ba61cc7dc6829566e535a6ec68528f8e1afbed1c41f", - "sha256:9b54577032d4f235452f77a83169b6527bf4b77d73aeada97d45b2aaf1bf5ce0", - "sha256:a09506eb48fa5493c58f946c46754ef22f3ec0df64f2b5149373ff31fb67f3dd", - "sha256:a212e5dea1a4182e40cd3e4067ee46be9d10418092ce3627475e995cca95de21", - "sha256:a731ac5cffc34dac62053e0da90f0c0b8560396a19f69d9703e88240c8f05858", - "sha256:af5ef6cfaf0d023c00002ba25d0751e5995fa0e4c9eec6cd263c30352662cbce", - "sha256:b58b855d0071575ea9c7bc0d84a06d2edfbfccec52e9657864386381a7ce1ae9", - "sha256:bc808924470643b82b14fe121923c30ec211d8c693e747eba8a7414bc4351a23", - "sha256:c557e94e91a983e5b1e9c60076a8fd79fea1e7e06848eb2e48d0ccfb30f6e073", - "sha256:c71be3f86d67d8d1311c6076a4ba3b75ba5703c0b856b4e691c9097f9b1e8bd2", - "sha256:c8754c75f55781515a3005063d9a05878b2cfb3cb7e41d5401ad0cf19de14872", - "sha256:cb0af13433dbbd1c806e671d81ec75bd324af6ef75171fd7815ca3074fe32bfe", - "sha256:cba6209c96828711cb7c8fcb45ecef8c8859238baf15119daa1bef0f6c84bfe7", - "sha256:cf77f8cf2a651fbd869fbdcb4a1931464189cd210abc4cfad357f1cacc8642a6", - "sha256:d7404cebcdb11bb5bd40bf94131faf7e9a7c10a6c60358580fe83913f360f929", - "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962", - "sha256:e5d97c65ea7e097056f3d1ead77040ebc236feaf7f71489383d20f3b4c28412a", - "sha256:f1c3dc536b3ee124e8b24feb7533e5c70b9f2ef833e3b2e5513b2897fd46763a", - "sha256:f2212796593ad1d0235068c79836861f2201fc7137a99aa2fea7beeb3b101177", - "sha256:fead980fbc68512dfd4e0c7b1f5754c2a8e5015a04dea454b9cada54a8423525" + "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", + "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", + "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", + "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", + "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", + "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", + "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", + "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", + "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", + "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", + "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", + "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", + "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", + "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", + "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", + "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", + "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", + "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", + "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", + "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", + "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", + "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", + "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", + "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", + "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", + "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", + "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", + "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", + "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", + "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", + "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", + "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", + "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", + "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", + "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", + "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", + "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", + "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", + "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", + "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", + "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", + "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", + "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", + "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", + "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", + "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", + "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", + "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", + "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", + "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", + "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", + "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", + "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", + "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" ], "markers": "python_version >= '3.7'", - "version": "==1.60.1" + "version": "==1.62.1" }, "grpcio-status": { "hashes": [ - "sha256:3034fdb239185b6e0f3169d08c268c4507481e4b8a434c21311a03d9eb5889a0", - "sha256:61b5aab8989498e8aa142c20b88829ea5d90d18c18c853b9f9e6d407d37bf8b4" + "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77", + "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17" ], "markers": "python_version >= '3.6'", - "version": "==1.60.1" + "version": "==1.62.1" }, "idna": { "hashes": [ @@ -513,26 +513,27 @@ }, "pyasn1": { "hashes": [ - "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58", - "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c" + "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c", + "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.5.1" + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, "pyasn1-modules": { "hashes": [ - "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", - "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", + "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.3.0" + "markers": "python_version >= '3.8'", + "version": "==0.4.0" }, "pycparser": { "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "version": "==2.21" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pygit2": { "hashes": [ @@ -576,11 +577,11 @@ }, "pyparsing": { "hashes": [ - "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb", - "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db" + "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad", + "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.1.1" + "version": "==3.1.2" }, "pytz": { "hashes": [ @@ -649,20 +650,20 @@ }, "redis": { "hashes": [ - "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f", - "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f" + "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580", + "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==5.0.1" + "version": "==5.0.3" }, "referencing": { "hashes": [ - "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5", - "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7" + "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844", + "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4" ], "markers": "python_version >= '3.8'", - "version": "==0.33.0" + "version": "==0.34.0" }, "requests": { "hashes": [ @@ -793,14 +794,6 @@ "markers": "python_version >= '3.7'", "version": "==3.0.2" }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" - }, "urllib3": { "hashes": [ "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", @@ -813,11 +806,11 @@ "develop": { "astroid": { "hashes": [ - "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93", - "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17" + "sha256:951798f922990137ac090c53af473db7ab4e70c770e6d7fae0cec59f74411819", + "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4" ], "markers": "python_full_version >= '3.8.0'", - "version": "==3.0.3" + "version": "==3.1.0" }, "dill": { "hashes": [ @@ -829,11 +822,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e", - "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc" + "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", + "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2" ], "markers": "python_version >= '3.8'", - "version": "==7.0.1" + "version": "==7.1.0" }, "isort": { "hashes": [ @@ -861,12 +854,12 @@ }, "pylint": { "hashes": [ - "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b", - "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810" + "sha256:507a5b60953874766d8a366e8e8c7af63e058b26345cfcb5f91f89d987fd6b74", + "sha256:6a69beb4a6f63debebaab0a3477ecd0f559aa726af4954fc948c51f7a2549e23" ], "index": "pypi", "markers": "python_full_version >= '3.8.0'", - "version": "==3.0.3" + "version": "==3.1.0" }, "tomli": { "hashes": [ @@ -878,11 +871,11 @@ }, "tomlkit": { "hashes": [ - "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4", - "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba" + "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b", + "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3" ], "markers": "python_version >= '3.7'", - "version": "==0.12.3" + "version": "==0.12.4" }, "yapf": { "hashes": [ @@ -895,11 +888,11 @@ }, "zipp": { "hashes": [ - "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", - "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b", + "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715" ], "markers": "python_version >= '3.8'", - "version": "==3.17.0" + "version": "==3.18.1" } } } From 216c120c52f7ee7c310aba51cbaa57418b64ed2f Mon Sep 17 00:00:00 2001 From: Holly Gong <39108850+hogo6002@users.noreply.github.com> Date: Wed, 10 Apr 2024 17:02:00 +1000 Subject: [PATCH 34/56] Modify Debian convert script permission. (#2102) --- vulnfeeds/cmd/debian/Dockerfile | 2 ++ vulnfeeds/cmd/debian/run_debian_convert.sh | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) mode change 100644 => 100755 vulnfeeds/cmd/debian/run_debian_convert.sh diff --git a/vulnfeeds/cmd/debian/Dockerfile b/vulnfeeds/cmd/debian/Dockerfile index 079b529c4fa..d3513053308 100644 --- a/vulnfeeds/cmd/debian/Dockerfile +++ b/vulnfeeds/cmd/debian/Dockerfile @@ -31,4 +31,6 @@ WORKDIR /root/ COPY --from=GO_BUILD /src/debian-osv ./ COPY ./cmd/debian/run_debian_convert.sh ./ +RUN chmod 755 ./run_debian_convert.sh + ENTRYPOINT ["/root/run_debian_convert.sh"] diff --git a/vulnfeeds/cmd/debian/run_debian_convert.sh b/vulnfeeds/cmd/debian/run_debian_convert.sh old mode 100644 new mode 100755 index a5bc85f9446..72b1b8942d4 --- a/vulnfeeds/cmd/debian/run_debian_convert.sh +++ b/vulnfeeds/cmd/debian/run_debian_convert.sh @@ -1,6 +1,6 @@ #!/bin/bash -## Converts alpine security advisory into general affected package information +## Converts Debian security tracker into general affected package information ## Then uploads the results to google cloud store. ## ## This script is intended to be the entrypoint of the docker image. From a604a949d2c074908471bc1e36133fb6e57ddffe Mon Sep 17 00:00:00 2001 From: Holly Gong <39108850+hogo6002@users.noreply.github.com> Date: Thu, 11 Apr 2024 13:54:37 +1000 Subject: [PATCH 35/56] Add introduced version to Debian CVE entries (#2104) Add introduce versions "0" to Debian CVE conversion entries. --- vulnfeeds/cmd/debian/main.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vulnfeeds/cmd/debian/main.go b/vulnfeeds/cmd/debian/main.go index f1011bdac5a..e11256d56f5 100644 --- a/vulnfeeds/cmd/debian/main.go +++ b/vulnfeeds/cmd/debian/main.go @@ -119,7 +119,11 @@ func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release continue } pkgInfo.VersionInfo = cves.VersionInfo{ - AffectedVersions: []cves.AffectedVersion{{Fixed: release.FixedVersion}}, + AffectedVersions: []cves.AffectedVersion{{Introduced: "0", Fixed: release.FixedVersion}}, + } + } else { + pkgInfo.VersionInfo = cves.VersionInfo{ + AffectedVersions: []cves.AffectedVersion{{Introduced: "0"}}, } } pkgInfo.EcosystemSpecific["urgency"] = release.Urgency From 562374db5ed58755c8b5670eaf9abc4bfb564e24 Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Thu, 11 Apr 2024 17:11:42 +1000 Subject: [PATCH 36/56] Add the Ubuntu OSV data source to production (#2105) Caveat: The lack of version enumeration greatly reduces the utility of this data. --- source.yaml | 14 ++++++++++++++ source_test.yaml | 1 + 2 files changed, 15 insertions(+) diff --git a/source.yaml b/source.yaml index a7e4b10ed6a..c44890dc67a 100644 --- a/source.yaml +++ b/source.yaml @@ -271,6 +271,20 @@ editable: False repo_username: git +- name: 'ubuntu' + versions_from_repo: False + type: 0 + ignore_patterns: [] + directory_path: 'osv' + repo_url: 'https://github.com/canonical/ubuntu-security-notices.git' + detect_cherrypicks: False + extension: '.json' + db_prefix: 'USN-' + ignore_git: False + human_link: 'https://ubuntu.com/security/notices/{{ BUG_ID }}' + link: 'https://github.com/canonical/ubuntu-security-notices/blob/main/' + editable: False + - name: uvi versions_from_repo: True type: 0 diff --git a/source_test.yaml b/source_test.yaml index c61509e0356..a01816952f3 100644 --- a/source_test.yaml +++ b/source_test.yaml @@ -268,6 +268,7 @@ extension: '.json' db_prefix: 'USN-' ignore_git: False + human_link: 'https://ubuntu.com/security/notices/{{ BUG_ID }}' link: 'https://github.com/canonical/ubuntu-security-notices/blob/main/' editable: False From 2c108ed30a443b7997890858874167f9c972ecec Mon Sep 17 00:00:00 2001 From: Zahra Alizadeh <73332835+zahraaalizadeh@users.noreply.github.com> Date: Thu, 18 Apr 2024 13:52:36 +0930 Subject: [PATCH 37/56] Add 404 template (#2114) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change, adds a custom 404 page. The new template extends the existing base template and uses the existing styles. issue: https://github.com/google/osv.dev/issues/1556 Here is how it looks: **On desktop screen** Screenshot 2024-04-17 at 4 30 14β€―pm **On mobile/tablet screen** Screenshot 2024-04-17 at 4 30 50β€―pm Screenshot 2024-04-17 at 4 31 22β€―pm Screenshot 2024-04-17 at 4 31 45β€―pm --- gcp/appengine/frontend3/src/base.html | 2 + gcp/appengine/frontend3/src/styles.scss | 78 ++++++++++++++++++- .../frontend3/src/templates/404.html | 23 ++++++ gcp/appengine/frontend_handlers.py | 8 ++ 4 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 gcp/appengine/frontend3/src/templates/404.html diff --git a/gcp/appengine/frontend3/src/base.html b/gcp/appengine/frontend3/src/base.html index 34103bab5bf..b2e1e8182d9 100644 --- a/gcp/appengine/frontend3/src/base.html +++ b/gcp/appengine/frontend3/src/base.html @@ -24,6 +24,7 @@

  • + {% endblock %} {% block content %}{% endblock %} diff --git a/gcp/appengine/frontend3/src/styles.scss b/gcp/appengine/frontend3/src/styles.scss index a45ec4fb263..f43e30c5d77 100644 --- a/gcp/appengine/frontend3/src/styles.scss +++ b/gcp/appengine/frontend3/src/styles.scss @@ -7,6 +7,7 @@ $osv-accent-color-hover: #c5221fb2; $osv-red-300: #ec928e; $osv-grey-600: #80868b; $osv-grey-800: #3C4043; +$osv-cyan-300: #C9F5F7; $osv-body-font-family: string.unquote('Overpass, sans-serif'); $osv-heading-font-family: string.unquote('"Overpass Mono", monospace'); $osv-heading-size: 60px; @@ -1271,7 +1272,7 @@ div.highlight { } a { - color: #C9F5F7 + color: $osv-cyan-300 } .author { @@ -1289,4 +1290,79 @@ div.highlight { margin: 0 auto; font-size: 16px; } +} + +/** 404 page */ +.not-found-page { + height: 100%; + margin: 0; + align-items: center; + justify-content: center; + font-family: $osv-heading-font-family; + color: $osv-text-color; + font-size: 15px; + max-width: 1200px; + margin: 0 auto; + + .mdc-layout-grid__cell--span-12 { + margin: 0 24px; + } + + .text-info { + max-width: 900px; + margin: 20px auto 0; + + .heading { + font-size: $osv-heading-size; + text-align: center; + margin-bottom: 32px; + } + + @media (max-width: $osv-mobile-breakpoint) { + .heading { + font-size: $osv-heading-size-mobile; + } + } + + .description { + font-size: 20px; + line-height: 26px; + margin-bottom: 24px; + margin-left: 8px; + margin-right: 8px; + text-align: center; + } + + .cta { + margin: 32px 0; + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 4px; + } + + h2,h3,h4 { + line-height: 1.1; + font-weight: 300; + margin-top: 3rem; + margin-bottom: 1.5rem; + } + + p { + margin-bottom: 16px; + line-height: 1.6; + } + + a { + color: $osv-cyan-300; + } + } + + footer { + background: url('/static/img/footer-decoration.png'); + background-repeat: no-repeat; + background-position: center; + min-height: 500px; + width: 100%; + } } \ No newline at end of file diff --git a/gcp/appengine/frontend3/src/templates/404.html b/gcp/appengine/frontend3/src/templates/404.html new file mode 100644 index 00000000000..01f913e6a38 --- /dev/null +++ b/gcp/appengine/frontend3/src/templates/404.html @@ -0,0 +1,23 @@ +{% extends 'base.html' %} + +{% block top_bar %} {% endblock %} + +{% block content %} + +{% endblock %} diff --git a/gcp/appengine/frontend_handlers.py b/gcp/appengine/frontend_handlers.py index 41a75169864..8da9ed6e2a8 100644 --- a/gcp/appengine/frontend_handlers.py +++ b/gcp/appengine/frontend_handlers.py @@ -17,6 +17,7 @@ import os import math import re +import logging from flask import abort from flask import current_app @@ -38,6 +39,7 @@ import rate_limiter import source_mapper import utils +from werkzeug import exceptions blueprint = Blueprint('frontend_handlers', __name__) @@ -590,3 +592,9 @@ def list_packages(vuln_affected: list[dict]): packages.append(parsed_scheme) return packages + + +@blueprint.app_errorhandler(404) +def not_found_error(error: exceptions.HTTPException): + logging.info('Handled %s - Path attempted: %s', error, request.path) + return render_template('404.html'), 404 From b2760892dcf507d2272da13aff77118a855000b4 Mon Sep 17 00:00:00 2001 From: Xueqin Cui <72771658+cuixq@users.noreply.github.com> Date: Thu, 18 Apr 2024 14:32:44 +1000 Subject: [PATCH 38/56] gcp/appengine: update gunicorn to 22.0.0 (#2116) This should resolve https://github.com/google/osv.dev/security/dependabot/170 --------- Co-authored-by: Andrew Pollock --- gcp/appengine/Pipfile | 2 +- gcp/appengine/Pipfile.lock | 240 ++++++++++++++++++++----------------- 2 files changed, 130 insertions(+), 112 deletions(-) diff --git a/gcp/appengine/Pipfile b/gcp/appengine/Pipfile index 8a5fac47dfb..85929ed2ad3 100644 --- a/gcp/appengine/Pipfile +++ b/gcp/appengine/Pipfile @@ -20,7 +20,7 @@ packaging = "==21.3" redis = "==4.6.0" requests = "==2.31.0" grpcio-status = "==1.62.0" -gunicorn = "==21.2.0" +gunicorn = "==22.0.0" whitenoise = "6.5.0" [dev-packages] diff --git a/gcp/appengine/Pipfile.lock b/gcp/appengine/Pipfile.lock index e76dab1cf52..fb045f8085d 100644 --- a/gcp/appengine/Pipfile.lock +++ b/gcp/appengine/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "91cadaeda4c90b9fea43c041f38e79c954a51c23494a626ca649432583c7be55" + "sha256": "2f9189caa4c5ff8c863770f0955c17654f05d34695ae42a8c86b9f288a1e7145" }, "pipfile-spec": 6, "requires": { @@ -312,7 +312,7 @@ "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc", "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b" ], - "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.3.3" }, "flask-caching": { @@ -320,27 +320,26 @@ "sha256:b7500c145135836a952e3de3a80881d9654e327a29c852c9265607f5c449235c", "sha256:f02645a629a8c89800d96dc8f690a574a0d49dcd66c7536badc6d362ba46b716" ], - "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.1.0" }, "flask-compress": { "hashes": [ - "sha256:b86c9808f0f38ea2246c9730972cf978f2cdf6a9a1a69102ba81e07891e6b26c", - "sha256:e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee" + "sha256:1128f71fbd788393ce26830c51f8b5a1a7a4d085e79a21a5cddf4c057dcd559b", + "sha256:ee96f18bf9b00f2deb4e3406ca4a05093aa80e2ef0578525a3b4d32ecdff129d" ], - "index": "pypi", - "version": "==1.14" + "version": "==1.13" }, "google-api-core": { "extras": [ "grpc" ], "hashes": [ - "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e", - "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95" + "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6", + "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9" ], "markers": "python_version >= '3.7'", - "version": "==2.17.1" + "version": "==2.18.0" }, "google-auth": { "hashes": [ @@ -348,15 +347,16 @@ "sha256:34fc3046c257cedcf1622fc4b31fc2be7923d9b4d44973d481125ecc50d83885" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.28.1" }, "google-cloud-appengine-logging": { "hashes": [ - "sha256:08d46bacf7e6bb4cb963dc5c0ab6995f2cd3fec69c7a2862405e98dce0c194bc", - "sha256:134de64a84017cfe26a4b3a325bcc9b4a2dba05f9c9d3902ee24b4b1fa3e28af" + "sha256:8e30af51d853f219caf29e8b8b342b9ce8214b29f334dafae38d39aaaff7d372", + "sha256:fb504e6199fe8de85baa9d31cecf6776877851fe58867de603317ec7cc739987" ], "markers": "python_version >= '3.7'", - "version": "==1.4.2" + "version": "==1.4.3" }, "google-cloud-audit-log": { "hashes": [ @@ -388,6 +388,7 @@ "sha256:4decb1b0bed4a0e3c0e58a376646e6002d6be7cad039e3466822e8665072ea33" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==3.9.0" }, "google-cloud-ndb": { @@ -396,6 +397,7 @@ "sha256:135e0e7766b0b29be8dbcf68f294981057942654c94bcf7faa974677c4e6ab27" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.3.0" }, "google-cloud-pubsub": { @@ -404,15 +406,19 @@ "sha256:598b944ef6345ab1e881816f5667f0f14244d6a8605be37acc0fae7059602be2" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.19.8" }, "googleapis-common-protos": { + "extras": [ + "grpc" + ], "hashes": [ - "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07", - "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277" + "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e", + "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632" ], "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.63.0" }, "grpc-google-iam-v1": { "hashes": [ @@ -424,63 +430,63 @@ }, "grpcio": { "hashes": [ - "sha256:0b9179478b09ee22f4a36b40ca87ad43376acdccc816ce7c2193a9061bf35701", - "sha256:0d3dee701e48ee76b7d6fbbba18ba8bc142e5b231ef7d3d97065204702224e0e", - "sha256:0d7ae7fc7dbbf2d78d6323641ded767d9ec6d121aaf931ec4a5c50797b886532", - "sha256:0e97f37a3b7c89f9125b92d22e9c8323f4e76e7993ba7049b9f4ccbe8bae958a", - "sha256:136ffd79791b1eddda8d827b607a6285474ff8a1a5735c4947b58c481e5e4271", - "sha256:1bc8449084fe395575ed24809752e1dc4592bb70900a03ca42bf236ed5bf008f", - "sha256:1eda79574aec8ec4d00768dcb07daba60ed08ef32583b62b90bbf274b3c279f7", - "sha256:29cb592c4ce64a023712875368bcae13938c7f03e99f080407e20ffe0a9aa33b", - "sha256:2c1488b31a521fbba50ae86423f5306668d6f3a46d124f7819c603979fc538c4", - "sha256:2e84bfb2a734e4a234b116be208d6f0214e68dcf7804306f97962f93c22a1839", - "sha256:2f3d9a4d0abb57e5f49ed5039d3ed375826c2635751ab89dcc25932ff683bbb6", - "sha256:36df33080cd7897623feff57831eb83c98b84640b016ce443305977fac7566fb", - "sha256:38f69de9c28c1e7a8fd24e4af4264726637b72f27c2099eaea6e513e7142b47e", - "sha256:39cd45bd82a2e510e591ca2ddbe22352e8413378852ae814549c162cf3992a93", - "sha256:3fa15850a6aba230eed06b236287c50d65a98f05054a0f01ccedf8e1cc89d57f", - "sha256:4cd356211579043fce9f52acc861e519316fff93980a212c8109cca8f47366b6", - "sha256:56ca7ba0b51ed0de1646f1735154143dcbdf9ec2dbe8cc6645def299bb527ca1", - "sha256:5e709f7c8028ce0443bddc290fb9c967c1e0e9159ef7a030e8c21cac1feabd35", - "sha256:614c3ed234208e76991992342bab725f379cc81c7dd5035ee1de2f7e3f7a9842", - "sha256:62aa1659d8b6aad7329ede5d5b077e3d71bf488d85795db517118c390358d5f6", - "sha256:62ccb92f594d3d9fcd00064b149a0187c246b11e46ff1b7935191f169227f04c", - "sha256:662d3df5314ecde3184cf87ddd2c3a66095b3acbb2d57a8cada571747af03873", - "sha256:748496af9238ac78dcd98cce65421f1adce28c3979393e3609683fcd7f3880d7", - "sha256:77d48e5b1f8f4204889f1acf30bb57c30378e17c8d20df5acbe8029e985f735c", - "sha256:7a195531828b46ea9c4623c47e1dc45650fc7206f8a71825898dd4c9004b0928", - "sha256:7e1f51e2a460b7394670fdb615e26d31d3260015154ea4f1501a45047abe06c9", - "sha256:7eea57444a354ee217fda23f4b479a4cdfea35fb918ca0d8a0e73c271e52c09c", - "sha256:7f9d6c3223914abb51ac564dc9c3782d23ca445d2864321b9059d62d47144021", - "sha256:81531632f93fece32b2762247c4c169021177e58e725494f9a746ca62c83acaa", - "sha256:81d444e5e182be4c7856cd33a610154fe9ea1726bd071d07e7ba13fafd202e38", - "sha256:821a44bd63d0f04e33cf4ddf33c14cae176346486b0df08b41a6132b976de5fc", - "sha256:88f41f33da3840b4a9bbec68079096d4caf629e2c6ed3a72112159d570d98ebe", - "sha256:8aab8f90b2a41208c0a071ec39a6e5dbba16fd827455aaa070fec241624ccef8", - "sha256:921148f57c2e4b076af59a815467d399b7447f6e0ee10ef6d2601eb1e9c7f402", - "sha256:92cdb616be44c8ac23a57cce0243af0137a10aa82234f23cd46e69e115071388", - "sha256:95370c71b8c9062f9ea033a0867c4c73d6f0ff35113ebd2618171ec1f1e903e0", - "sha256:98d8f4eb91f1ce0735bf0b67c3b2a4fea68b52b2fd13dc4318583181f9219b4b", - "sha256:a33f2bfd8a58a02aab93f94f6c61279be0f48f99fcca20ebaee67576cd57307b", - "sha256:ab140a3542bbcea37162bdfc12ce0d47a3cda3f2d91b752a124cc9fe6776a9e2", - "sha256:b3d3d755cfa331d6090e13aac276d4a3fb828bf935449dc16c3d554bf366136b", - "sha256:b71c65427bf0ec6a8b48c68c17356cb9fbfc96b1130d20a07cb462f4e4dcdcd5", - "sha256:b7a6be562dd18e5d5bec146ae9537f20ae1253beb971c0164f1e8a2f5a27e829", - "sha256:bcff647e7fe25495e7719f779cc219bbb90b9e79fbd1ce5bda6aae2567f469f2", - "sha256:c912688acc05e4ff012c8891803659d6a8a8b5106f0f66e0aed3fb7e77898fa6", - "sha256:ce1aafdf8d3f58cb67664f42a617af0e34555fe955450d42c19e4a6ad41c84bd", - "sha256:d6a56ba703be6b6267bf19423d888600c3f574ac7c2cc5e6220af90662a4d6b0", - "sha256:e803e9b58d8f9b4ff0ea991611a8d51b31c68d2e24572cd1fe85e99e8cc1b4f8", - "sha256:eef1d16ac26c5325e7d39f5452ea98d6988c700c427c52cbc7ce3201e6d93334", - "sha256:f359d635ee9428f0294bea062bb60c478a8ddc44b0b6f8e1f42997e5dc12e2ee", - "sha256:f4c04fe33039b35b97c02d2901a164bbbb2f21fb9c4e2a45a959f0b044c3512c", - "sha256:f897b16190b46bc4d4aaf0a32a4b819d559a37a756d7c6b571e9562c360eed72", - "sha256:fbe0c20ce9a1cff75cfb828b21f08d0a1ca527b67f2443174af6626798a754a4", - "sha256:fc2836cb829895ee190813446dce63df67e6ed7b9bf76060262c55fcd097d270", - "sha256:fcc98cff4084467839d0a20d16abc2a76005f3d1b38062464d088c07f500d170" + "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", + "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", + "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", + "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", + "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", + "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", + "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", + "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", + "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", + "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", + "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", + "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", + "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", + "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", + "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", + "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", + "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", + "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", + "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", + "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", + "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", + "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", + "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", + "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", + "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", + "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", + "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", + "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", + "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", + "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", + "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", + "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", + "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", + "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", + "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", + "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", + "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", + "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", + "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", + "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", + "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", + "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", + "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", + "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", + "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", + "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", + "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", + "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", + "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", + "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", + "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", + "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", + "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", + "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" ], "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.62.1" }, "grpcio-status": { "hashes": [ @@ -488,31 +494,33 @@ "sha256:3baac03fcd737310e67758c4082a188107f771d32855bce203331cd4c9aa687a" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.62.0" }, "gunicorn": { "hashes": [ - "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0", - "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033" + "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9", + "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63" ], "index": "pypi", - "version": "==21.2.0" + "markers": "python_version >= '3.7'", + "version": "==22.0.0" }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.7" }, "itsdangerous": { "hashes": [ - "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", - "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", + "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" ], - "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "markers": "python_version >= '3.8'", + "version": "==2.2.0" }, "jinja2": { "hashes": [ @@ -520,6 +528,7 @@ "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==3.1.3" }, "jsonschema": { @@ -544,6 +553,7 @@ "sha256:855bde5cbcceb9beda7c80efdf7f406c23e6079172c497fcfce22fdce998e892" ], "index": "pypi", + "markers": "python_version >= '3.5' and python_version < '4'", "version": "==2.4.13" }, "markupsafe": { @@ -610,6 +620,7 @@ "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.1.5" }, "osv": { @@ -622,6 +633,7 @@ "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==21.3" }, "proto-plus": { @@ -651,26 +663,27 @@ }, "pyasn1": { "hashes": [ - "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58", - "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c" + "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c", + "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.5.1" + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, "pyasn1-modules": { "hashes": [ - "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", - "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", + "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.3.0" + "markers": "python_version >= '3.8'", + "version": "==0.4.0" }, "pycparser": { "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "version": "==2.21" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pygit2": { "hashes": [ @@ -713,11 +726,11 @@ }, "pyparsing": { "hashes": [ - "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb", - "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db" + "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad", + "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.1.1" + "version": "==3.1.2" }, "pytz": { "hashes": [ @@ -789,15 +802,16 @@ "sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.6.0" }, "referencing": { "hashes": [ - "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5", - "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7" + "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844", + "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4" ], "markers": "python_version >= '3.8'", - "version": "==0.33.0" + "version": "==0.34.0" }, "requests": { "hashes": [ @@ -805,6 +819,7 @@ "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.31.0" }, "rpds-py": { @@ -933,7 +948,7 @@ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "urllib3": { @@ -950,15 +965,17 @@ "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==3.0.1" }, "whitenoise": { "hashes": [ - "sha256:8998f7370973447fac1e8ef6e8ded2c5209a7b1f67c1012866dbcd09681c3251", - "sha256:b1f9db9bf67dc183484d760b99f4080185633136a273a03f6436034a41064146" + "sha256:15fe60546ac975b58e357ccaeb165a4ca2d0ab697e48450b8f0307ca368195a8", + "sha256:16468e9ad2189f09f4a8c635a9031cc9bb2cdbc8e5e53365407acf99f7ade9ec" ], "index": "pypi", - "version": "==6.6.0" + "markers": "python_version >= '3.7'", + "version": "==6.5.0" } }, "develop": { @@ -979,11 +996,11 @@ }, "filelock": { "hashes": [ - "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e", - "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c" + "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f", + "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4" ], "markers": "python_version >= '3.8'", - "version": "==3.13.1" + "version": "==3.13.4" }, "pipenv": { "hashes": [ @@ -991,6 +1008,7 @@ "sha256:eed9c479d918a809deec23a4136f2b66091f035c849012acca3a9898d5f0938f" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2022.12.19" }, "platformdirs": { @@ -1003,19 +1021,19 @@ }, "setuptools": { "hashes": [ - "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56", - "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8" + "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", + "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" ], "markers": "python_version >= '3.8'", - "version": "==69.1.1" + "version": "==69.5.1" }, "virtualenv": { "hashes": [ - "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a", - "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197" + "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be", + "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e" ], "markers": "python_version >= '3.7'", - "version": "==20.25.1" + "version": "==20.25.3" }, "virtualenv-clone": { "hashes": [ From 0b775d88f53baefd2b1bf56dc39a1bcecc0a2d47 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 18 Apr 2024 22:04:46 +0200 Subject: [PATCH 39/56] chore(deps): update docs (#2100) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | [go](https://go.dev/) ([source](https://togithub.com/golang/go)) | golang | patch | `1.22.1` -> `1.22.2` | [![age](https://developer.mend.io/api/mc/badges/age/golang-version/go/1.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/golang-version/go/1.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/golang-version/go/1.22.1/1.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/golang-version/go/1.22.1/1.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | | | lockFileMaintenance | All locks refreshed | | | | | | [jekyll-feed](https://togithub.com/jekyll/jekyll-feed) | | minor | `0.15.1` -> `0.17.0` | [![age](https://developer.mend.io/api/mc/badges/age/rubygems/jekyll-feed/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/rubygems/jekyll-feed/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/rubygems/jekyll-feed/0.15.1/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/rubygems/jekyll-feed/0.15.1/0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
    golang/go (go) ### [`v1.22.2`](https://togithub.com/golang/go/compare/go1.22.1...go1.22.2)
    jekyll/jekyll-feed (jekyll-feed) ### [`v0.17.0`](https://togithub.com/jekyll/jekyll-feed/blob/HEAD/History.markdown#0170--2022-10-14) [Compare Source](https://togithub.com/jekyll/jekyll-feed/compare/v0.16.0...v0.17.0) ##### Documentation - Update CI status badge ([#​363](https://togithub.com/jekyll/jekyll-feed/issues/363)) ##### Development Fixes - Add Ruby 3.1 to the CI matrix ([#​365](https://togithub.com/jekyll/jekyll-feed/issues/365)) ##### Minor Enhancements - Allow disabling of jekyll-feed while in development ([#​370](https://togithub.com/jekyll/jekyll-feed/issues/370)) ### [`v0.16.0`](https://togithub.com/jekyll/jekyll-feed/blob/HEAD/History.markdown#0160--2022-01-03) [Compare Source](https://togithub.com/jekyll/jekyll-feed/compare/v0.15.1...v0.16.0) ##### Minor Enhancements - Add support for `page.description` in front matter to become entry `` ([#​297](https://togithub.com/jekyll/jekyll-feed/issues/297)) ##### Bug Fixes - Fold private methods into the `:render` method as local variables ([#​327](https://togithub.com/jekyll/jekyll-feed/issues/327)) - Check `post.categories` instead of `post.category` ([#​357](https://togithub.com/jekyll/jekyll-feed/issues/357)) - Switched xml_escape for `` for post content ([#​332](https://togithub.com/jekyll/jekyll-feed/issues/332)) ##### Development Fixes - Add Ruby 3.0 to CI ([#​337](https://togithub.com/jekyll/jekyll-feed/issues/337)) - Lock RuboCop to v1.18.x ([#​348](https://togithub.com/jekyll/jekyll-feed/issues/348)) - Add workflow to release gem via GH Action ([#​355](https://togithub.com/jekyll/jekyll-feed/issues/355)) ##### Documentation - Use `.atom` extension in documented examples since we write an Atom feed ([#​359](https://togithub.com/jekyll/jekyll-feed/issues/359))
    --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 6am on wednesday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 476e8d39cda..3ed1fabb988 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -96,7 +96,7 @@ GEM activesupport (>= 2) nokogiri (>= 1.4) http_parser.rb (0.8.0) - i18n (1.14.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) jekyll (3.9.3) addressable (~> 2.4) From a15fbba84a8a74f602c5571f2b31a6a681277022 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 07:59:02 +1000 Subject: [PATCH 40/56] chore(deps): Bump idna from 3.6 to 3.7 (#2109) Bumps [idna](https://github.com/kjd/idna) from 3.6 to 3.7.
    Release notes

    Sourced from idna's releases.

    v3.7

    What's Changed

    • Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]

    Thanks to Guido Vranken for reporting the issue.

    Full Changelog: https://github.com/kjd/idna/compare/v3.6...v3.7

    Changelog

    Sourced from idna's changelog.

    3.7 (2024-04-11) ++++++++++++++++

    • Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]

    Thanks to Guido Vranken for reporting the issue.

    Commits
    • 1d365e1 Release v3.7
    • c1b3154 Merge pull request #172 from kjd/optimize-contextj
    • 0394ec7 Merge branch 'master' into optimize-contextj
    • cd58a23 Merge pull request #152 from elliotwutingfeng/dev
    • 5beb28b More efficient resolution of joiner contexts
    • 1b12148 Update ossf/scorecard-action to v2.3.1
    • d516b87 Update Github actions/checkout to v4
    • c095c75 Merge branch 'master' into dev
    • 60a0a4c Fix typo in GitHub Actions workflow key
    • 5918a0e Merge branch 'master' into dev
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=idna&package-manager=pip&previous-version=3.6&new-version=3.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Pipfile.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 8a265ac7e86..12407df21f1 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -444,11 +444,12 @@ }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], + "index": "pypi", "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.7" }, "jsonschema": { "hashes": [ From 9f95970001bdf92f6024225c52b924b05afa5119 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 08:04:19 +1000 Subject: [PATCH 41/56] chore(deps): Bump idna from 3.6 to 3.7 in /gcp/functions/pypi (#2108) Bumps [idna](https://github.com/kjd/idna) from 3.6 to 3.7.
    Release notes

    Sourced from idna's releases.

    v3.7

    What's Changed

    • Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]

    Thanks to Guido Vranken for reporting the issue.

    Full Changelog: https://github.com/kjd/idna/compare/v3.6...v3.7

    Changelog

    Sourced from idna's changelog.

    3.7 (2024-04-11) ++++++++++++++++

    • Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]

    Thanks to Guido Vranken for reporting the issue.

    Commits
    • 1d365e1 Release v3.7
    • c1b3154 Merge pull request #172 from kjd/optimize-contextj
    • 0394ec7 Merge branch 'master' into optimize-contextj
    • cd58a23 Merge pull request #152 from elliotwutingfeng/dev
    • 5beb28b More efficient resolution of joiner contexts
    • 1b12148 Update ossf/scorecard-action to v2.3.1
    • d516b87 Update Github actions/checkout to v4
    • c095c75 Merge branch 'master' into dev
    • 60a0a4c Fix typo in GitHub Actions workflow key
    • 5918a0e Merge branch 'master' into dev
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=idna&package-manager=pip&previous-version=3.6&new-version=3.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gcp/functions/pypi/Pipfile.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcp/functions/pypi/Pipfile.lock b/gcp/functions/pypi/Pipfile.lock index 0817e097d3f..602e6d2b628 100644 --- a/gcp/functions/pypi/Pipfile.lock +++ b/gcp/functions/pypi/Pipfile.lock @@ -371,11 +371,12 @@ }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], + "index": "pypi", "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.7" }, "jsonschema": { "hashes": [ From af58d87a59f3e36084321d307d068bed2e6dc96d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 19 Apr 2024 00:05:50 +0200 Subject: [PATCH 42/56] chore(deps): lock file maintenance api (#2111) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | | | lockFileMaintenance | All locks refreshed | | | | | | google-cloud-pubsub | packages | patch | `==2.21.0` -> `==2.21.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-pubsub/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-pubsub/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-pubsub/2.21.0/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-pubsub/2.21.0/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | grpcio | packages | patch | `==1.62.1` -> `==1.62.2` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/grpcio/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/grpcio/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/grpcio/1.62.1/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/grpcio/1.62.1/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- gcp/api/Pipfile | 4 +- gcp/api/Pipfile.lock | 391 ++++++++++++++++++++++--------------------- 2 files changed, 198 insertions(+), 197 deletions(-) diff --git a/gcp/api/Pipfile b/gcp/api/Pipfile index bedc1ecc6c4..33242b56e72 100644 --- a/gcp/api/Pipfile +++ b/gcp/api/Pipfile @@ -6,8 +6,8 @@ name = "pypi" [packages] google-cloud-ndb = "==2.3.1" google-cloud-logging = "==3.10.0" -google-cloud-pubsub = "==2.21.0" -grpcio = "==1.62.1" +google-cloud-pubsub = "==2.21.1" +grpcio = "==1.62.2" osv = {editable = true, path = "../../"} packageurl-python = "==0.15.0" packaging = "==20.9" diff --git a/gcp/api/Pipfile.lock b/gcp/api/Pipfile.lock index ea4d737e7e9..b8eb8b7726f 100644 --- a/gcp/api/Pipfile.lock +++ b/gcp/api/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "40444362460f69410bf747a3dc339d56df806c641b50b0c57c371a9b352a27b0" + "sha256": "d673873f059d0c634499d2938f90263be2397e6bab966fbc975f9274b8f78806" }, "pipfile-spec": 6, "requires": { @@ -265,12 +265,12 @@ }, "google-cloud-pubsub": { "hashes": [ - "sha256:94017f0bc9a85fa3f4d913f312e930a0fe21775bd68dde5c666e2f1b1addf811", - "sha256:fabd19e08faa1f70081b0e5ea003a3c031a1d2c1b798cf1be5ded2dbf1d1dbef" + "sha256:31fcf07444b7f813a616c4b650e1fbf1dc998a088fe0059a76164855ac17f05c", + "sha256:55a3602ec45bc09626604d712032288a8ee3566145cb83523cff908938f69a4b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.21.0" + "version": "==2.21.1" }, "googleapis-common-protos": { "extras": [ @@ -293,98 +293,98 @@ }, "grpcio": { "hashes": [ - "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", - "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", - "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", - "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", - "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", - "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", - "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", - "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", - "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", - "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", - "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", - "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", - "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", - "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", - "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", - "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", - "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", - "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", - "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", - "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", - "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", - "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", - "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", - "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", - "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", - "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", - "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", - "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", - "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", - "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", - "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", - "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", - "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", - "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", - "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", - "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", - "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", - "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", - "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", - "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", - "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", - "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", - "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", - "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", - "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", - "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", - "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", - "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", - "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", - "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", - "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", - "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", - "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", - "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" + "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f", + "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200", + "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b", + "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f", + "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad", + "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36", + "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063", + "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467", + "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6", + "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811", + "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75", + "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05", + "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a", + "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43", + "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd", + "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc", + "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033", + "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1", + "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9", + "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9", + "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138", + "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5", + "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5", + "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f", + "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d", + "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051", + "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930", + "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2", + "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10", + "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a", + "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f", + "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4", + "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b", + "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c", + "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d", + "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9", + "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189", + "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199", + "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad", + "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e", + "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3", + "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc", + "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d", + "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049", + "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54", + "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756", + "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad", + "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4", + "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670", + "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea", + "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a", + "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1", + "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479", + "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-health-checking": { "hashes": [ - "sha256:9ce761c09fc383e7aa2f7e6c0b0b65d5a1157c1b98d1f5871f7c38aca47d49b9", - "sha256:9e56180a941b1d32a077d7491e0611d0483c396358afd5349bf00152612e4583" + "sha256:a44d1ea1e1510b5c62265dada04d86621bb1491d75de987713c9c0ea005c10a8", + "sha256:f0d77e02457aa00e98ce12c741dca6df7e34dbcc3859681c4a473dc589288e56" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-reflection": { "hashes": [ - "sha256:3eff85f74b6b40f8e6116e8363da1efccf775b7a063d2c6fd12c190bbb9676ed", - "sha256:abd453001991871031315ef2d82affe93080c0433fa3a007be34bf427e28a88a" + "sha256:2dd44806d68d0006636529bda573012b19a42281478c2d051cdaaebb91e2516c", + "sha256:68e8dff3617a9afaf7c462c688f7ca62b55323f497c662abf9965f2953508885" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-status": { "hashes": [ - "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77", - "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17" + "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f", + "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a" ], "markers": "python_version >= '3.6'", - "version": "==1.62.1" + "version": "==1.62.2" }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.7" }, "jsonschema": { "hashes": [ @@ -451,26 +451,27 @@ }, "pyasn1": { "hashes": [ - "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58", - "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c" + "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c", + "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.5.1" + "markers": "python_version >= '3.8'", + "version": "==0.6.0" }, "pyasn1-modules": { "hashes": [ - "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c", - "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d" + "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", + "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.3.0" + "markers": "python_version >= '3.8'", + "version": "==0.4.0" }, "pycparser": { "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "version": "==2.21" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pygit2": { "hashes": [ @@ -741,125 +742,125 @@ "develop": { "grpcio": { "hashes": [ - "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", - "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", - "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", - "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", - "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", - "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", - "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", - "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", - "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", - "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", - "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", - "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", - "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", - "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", - "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", - "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", - "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", - "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", - "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", - "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", - "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", - "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", - "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", - "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", - "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", - "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", - "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", - "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", - "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", - "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", - "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", - "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", - "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", - "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", - "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", - "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", - "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", - "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", - "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", - "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", - "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", - "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", - "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", - "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", - "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", - "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", - "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", - "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", - "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", - "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", - "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", - "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", - "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", - "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" + "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f", + "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200", + "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b", + "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f", + "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad", + "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36", + "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063", + "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467", + "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6", + "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811", + "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75", + "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05", + "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a", + "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43", + "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd", + "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc", + "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033", + "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1", + "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9", + "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9", + "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138", + "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5", + "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5", + "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f", + "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d", + "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051", + "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930", + "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2", + "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10", + "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a", + "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f", + "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4", + "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b", + "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c", + "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d", + "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9", + "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189", + "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199", + "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad", + "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e", + "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3", + "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc", + "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d", + "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049", + "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54", + "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756", + "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad", + "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4", + "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670", + "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea", + "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a", + "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1", + "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479", + "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-tools": { "hashes": [ - "sha256:024380536ba71a96cdf736f0954f6ad03f5da609c09edbcc2ca02fdd639e0eed", - "sha256:07af1a6442e2313cff22af93c2c4dd37ae32b5239b38e0d99e2cbf93de65429f", - "sha256:08fecc3c5b4e6dd3278f2b9d12837e423c7dcff551ca1e587018b4a0fc5f8019", - "sha256:0e140bbc08eea8abf51c0274f45fb1e8350220e64758998d7f3c7f985a0b2496", - "sha256:1344a773d2caa9bb7fbea7e879b84f33740c808c34a5bd2a2768e526117a6b44", - "sha256:13b20e269d14ad629ff9a2c9a2450f3dbb119d5948de63b27ffe624fa7aea85a", - "sha256:156d3e1b227c16e903003a56881dbe60e40f2b4bd66f0bc3b27c53e466e6384d", - "sha256:1819fd055c1ae672d1d725ec75eefd1f700c18acba0ed9332202be31d69c401d", - "sha256:2152308e5321cb90fb45aaa84d03d6dedb19735a8779aaf36c624f97b831842d", - "sha256:21f14b99e0cd38ad56754cc0b62b2bf3cf75f9f7fc40647da54669e0da0726fe", - "sha256:22644c90e43d1a888477899af917979e17364fdd6e9bbb92679cd6a54c4d36c3", - "sha256:23eb3d47f78f509fcd201749b1f1e44b76f447913f7fbb3b8bae20f109086295", - "sha256:2744947b6c5e907af21133431809ccca535a037356864e32c122efed8cb9de1f", - "sha256:2b04844a9382f1bde4b4174e476e654ab3976168d2469cb4b29e352f4f35a5aa", - "sha256:2eea1db3748b2f37b4dce84d8e0c15d9bc811094807cabafe7b0ea47f424dfd5", - "sha256:41384c9ee18e61ef20cad2774ef71bd8854b63efce263b5177aa06fccb84df1f", - "sha256:449503213d142f8470b331a1c2f346f8457f16c7fe20f531bc2500e271f7c14c", - "sha256:45d2e6cf04d27286b6f73e6e20ba3f0a1f6d8f5535e5dcb1356200419bb457f4", - "sha256:46ae58e6926773e7315e9005f0f17aacedbc0895a8752bec087d24efa2f1fb21", - "sha256:4c28086df31478023a36f45e50767872ab3aed2419afff09814cb61c88b77db4", - "sha256:50739aaab0c8076ad5957204e71f2e0c9876e11fd8338f7f09de12c2d75163c5", - "sha256:52b185dfc3bf32e70929310367dbc66185afba60492a6a75a9b1141d407e160c", - "sha256:575535d039b97d63e6a9abee626d6c7cd47bd8cb73dd00a5c84a98254a2164a4", - "sha256:598c54318f0326cf5020aa43fc95a15e933aba4a71943d3bff2677d2d21ddfa1", - "sha256:5ad7c5691625a85327e5b683443baf73ae790fd5afc938252041ed5cd665e377", - "sha256:5c38006f7702d2ff52122e4c77a47348709374050c76216e84b30a9f06e45afa", - "sha256:5d7bdea33354b55acf40bb4dd3ba7324d6f1ef6b4a1a4da0807591f8c7e87b9a", - "sha256:5dbe1f7481dd14b6d477b4bace96d275090bc7636b9883975a08b802c94e7b78", - "sha256:63a273b70896d3640b7a883eb4a080c3c263d91662d870a2e9c84b7bbd978e7b", - "sha256:6abd4eb3ccb444383a40156139acc3aaa73745d395139cb6bc8e2a3429e1e627", - "sha256:7444fcab861911525470d398e5638b70d5cbea3b4674a3de92b5c58c5c515d4d", - "sha256:771c051c5ece27ad03e4f2e33624a925f0ad636c01757ab7dbb04a37964af4ba", - "sha256:941f8a5c31986053e75fa466bcfa743c2bf1b513b7978cf1f4ab4e96a8219d27", - "sha256:975ac5fb482c23f3608c16e06a43c8bab4d79c2e2564cdbc25cf753c6e998775", - "sha256:98209c438b38b6f1276dbc27b1c04e346a75bfaafe72a25a548f2dc5ce71d226", - "sha256:999823758e9eacd0095863d06cd6d388be769f80c9abb65cdb11c4f2cfce3fea", - "sha256:9a11bcf609d00cfc9baed77ab308223cabc1f0b22a05774a26dd4c94c0c80f1f", - "sha256:a01e8dcd0f041f6fa6d815c54a2017d032950e310c41d514a8bc041e872c4d12", - "sha256:a4991e5ee8a97ab791296d3bf7e8700b1445635cc1828cc98df945ca1802d7f2", - "sha256:a4fba5b339f4797548591036c9481e6895bf920fab7d3dc664d2697f8fb7c0bf", - "sha256:b76aead9b73f1650a091870fe4e9ed15ac4d8ed136f962042367255199c23594", - "sha256:b9c02c88c77ef6057c6cbeea8922d7c2424aabf46bfc40ddf42a32765ba91061", - "sha256:d03b645852d605f43003020e78fe6d573cae6ee6b944193e36b8b317e7549a20", - "sha256:d1924a6a943df7c73b9ef0048302327c75962b567451479710da729ead241228", - "sha256:d66a5d47eaa427039752fa0a83a425ff2a487b6a0ac30556fd3be2f3a27a0130", - "sha256:dd933b8e0b3c13fe3543d58f849a6a5e0d7987688cb6801834278378c724f695", - "sha256:e643cd14a5d1e59865cba68a5a6f0175d987f36c5f4cb0db80dee9ed60b4c174", - "sha256:ed1f27dc2b2262c8b8d9036276619c1bb18791311c16ccbf1f31b660f2aad7cf", - "sha256:f2b404bcae7e2ef9b0b9803b2a95119eb7507e6dc80ea4a64a78be052c30cebc", - "sha256:f309bdb33a61f8e049480d41498ee2e525cfb5e959958b326abfdf552bf9b9cb", - "sha256:f358effd3c11d66c150e0227f983d54a5cd30e14038566dadcf25f9f6844e6e8", - "sha256:fd5d47707bd6bc2b707ece765c362d2a1d2e8f6cd92b04c99fab49a929f3610c", - "sha256:fdd987a580b4474769adfd40144486f54bcc73838d5ec5d3647a17883ea78e76", - "sha256:fe71ca30aabe42591e84ecb9694c0297dc699cc20c5b24d2cb267fb0fc01f947" + "sha256:04a394cf5e51ba9be412eb9f6c482b6270bd81016e033e8eb7d21b8cc28fe8b5", + "sha256:04c607029ae3660fb1624ed273811ffe09d57d84287d37e63b5b802a35897329", + "sha256:10cc3321704ecd17c93cf68c99c35467a8a97ffaaed53207e9b2da6ae0308ee1", + "sha256:1679b4903aed2dc5bd8cb22a452225b05dc8470a076f14fd703581efc0740cdb", + "sha256:184b4174d4bd82089d706e8223e46c42390a6ebac191073b9772abc77308f9fa", + "sha256:19216e1fb26dbe23d12a810517e1b3fbb8d4f98b1a3fbebeec9d93a79f092de4", + "sha256:19ea69e41c3565932aa28a202d1875ec56786aea46a2eab54a3b28e8a27f9517", + "sha256:1d768a5c07279a4c461ebf52d0cec1c6ca85c6291c71ec2703fe3c3e7e28e8c4", + "sha256:1fe08d2038f2b7c53259b5c49e0ad08c8e0ce2b548d8185993e7ef67e8592cca", + "sha256:217c2ee6a7ce519a55958b8622e21804f6fdb774db08c322f4c9536c35fdce7c", + "sha256:2ce149ea55eadb486a7fb75a20f63ef3ac065ee6a0240ed25f3549ce7954c653", + "sha256:2ed775e844566ce9ce089be9a81a8b928623b8ee5820f5e4d58c1a9d33dfc5ae", + "sha256:3708a747aa4b6b505727282ca887041174e146ae030ebcadaf4c1d346858df62", + "sha256:3a8d6f07e64c0c7756f4e0c4781d9d5a2b9cc9cbd28f7032a6fb8d4f847d0445", + "sha256:3c53b221378b035ae2f1881cbc3aca42a6075a8e90e1a342c2f205eb1d1aa6a1", + "sha256:40cd4eeea4b25bcb6903b82930d579027d034ba944393c4751cdefd9c49e6989", + "sha256:45db5da2bcfa88f2b86b57ef35daaae85c60bd6754a051d35d9449c959925b57", + "sha256:462e0ab8dd7c7b70bfd6e3195eebc177549ede5cf3189814850c76f9a340d7ce", + "sha256:47117c8a7e861382470d0e22d336e5a91fdc5f851d1db44fa784b9acea190d87", + "sha256:472505d030135d73afe4143b0873efe0dcb385bd6d847553b4f3afe07679af00", + "sha256:4f6f32d39283ea834a493fccf0ebe9cfddee7577bdcc27736ad4be1732a36399", + "sha256:4f955702dc4b530696375251319d05223b729ed24e8673c2129f7a75d2caefbb", + "sha256:4f989e5cebead3ae92c6abf6bf7b19949e1563a776aea896ac5933f143f0c45d", + "sha256:58cbb24b3fa6ae35aa9c210fcea3a51aa5fef0cd25618eb4fd94f746d5a9b703", + "sha256:5b07b5874187e170edfbd7aa2ca3a54ebf3b2952487653e8c0b0d83601c33035", + "sha256:5fd5e1582b678e6b941ee5f5809340be5e0724691df5299aae8226640f94e18f", + "sha256:6413581e14a80e0b4532577766cf0586de4dd33766a31b3eb5374a746771c07d", + "sha256:72b61332f1b439c14cbd3815174a8f1d35067a02047c32decd406b3a09bb9890", + "sha256:759c60f24c33a181bbbc1232a6752f9b49fbb1583312a4917e2b389fea0fb0f2", + "sha256:76eb459bdf3fb666e01883270beee18f3f11ed44488486b61cd210b4e0e17cc1", + "sha256:7a49bccae1c7d154b78e991885c3111c9ad8c8fa98e91233de425718f47c6139", + "sha256:7d8b4e00c3d7237b92260fc18a561cd81f1da82e8be100db1b7d816250defc66", + "sha256:7ea369c4d1567d1acdf69c8ea74144f4ccad9e545df7f9a4fc64c94fa7684ba3", + "sha256:8214820990d01b52845f9fbcb92d2b7384a0c321b303e3ac614c219dc7d1d3af", + "sha256:8c616d0ad872e3780693fce6a3ac8ef00fc0963e6d7815ce9dcfae68ba0fc287", + "sha256:987e774f74296842bbffd55ea8826370f70c499e5b5f71a8cf3103838b6ee9c3", + "sha256:9be84ff6d47fd61462be7523b49d7ba01adf67ce4e1447eae37721ab32464dd8", + "sha256:9d41e0e47dd075c075bb8f103422968a65dd0d8dc8613288f573ae91eb1053ba", + "sha256:9f1ba79a253df9e553d20319c615fa2b429684580fa042dba618d7f6649ac7e4", + "sha256:a34d97c62e61bfe9e6cff0410fe144ac8cca2fc979ad0be46b7edf026339d161", + "sha256:a7e439476b29d6dac363b321781a113794397afceeb97dad85349db5f1cb5e9a", + "sha256:ab84bae88597133f6ea7a2bdc57b2fda98a266fe8d8d4763652cbefd20e73ad7", + "sha256:b6746bc823958499a3cf8963cc1de00072962fb5e629f26d658882d3f4c35095", + "sha256:b8574469ecc4ff41d6bb95f44e0297cdb0d95bade388552a9a444db9cd7485cd", + "sha256:bdc5dd3f57b5368d5d661d5d3703bcaa38bceca59d25955dff66244dbc987271", + "sha256:c195d74fe98541178ece7a50dad2197d43991e0f77372b9a88da438be2486f12", + "sha256:c384c838b34d1b67068e51b5bbe49caa6aa3633acd158f1ab16b5da8d226bc53", + "sha256:c48fabe40b9170f4e3d7dd2c252e4f1ff395dc24e49ac15fc724b1b6f11724da", + "sha256:cbb8453ae83a1db2452b7fe0f4b78e4a8dd32be0f2b2b73591ae620d4d784d3d", + "sha256:d58389fe8be206ddfb4fa703db1e24c956856fcb9a81da62b13577b3a8f7fda7", + "sha256:d82f681c9a9d933a9d8068e8e382977768e7779ddb8870fa0cf918d8250d1532", + "sha256:e33b59fb3efdddeb97ded988a871710033e8638534c826567738d3edce528752", + "sha256:ec674b4440ef4311ac1245a709e87b36aca493ddc6850eebe0b278d1f2b6e7d1", + "sha256:fa107460c842e4c1a6266150881694fefd4f33baa544ea9489601810c2210ef8" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "protobuf": { "hashes": [ @@ -880,11 +881,11 @@ }, "setuptools": { "hashes": [ - "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", - "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" + "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", + "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" ], "markers": "python_version >= '3.8'", - "version": "==69.2.0" + "version": "==69.5.1" } } } From 64e488e179fccbe92e6812423df99bacccae1709 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Apr 2024 05:39:19 +1000 Subject: [PATCH 43/56] chore(deps): Bump golang.org/x/net from 0.19.0 to 0.23.0 in /vulnfeeds (#2117) Bumps [golang.org/x/net](https://github.com/golang/net) from 0.19.0 to 0.23.0.
    Commits
    • c48da13 http2: fix TestServerContinuationFlood flakes
    • 762b58d http2: fix tipos in comment
    • ba87210 http2: close connections when receiving too many headers
    • ebc8168 all: fix some typos
    • 3678185 http2: make TestCanonicalHeaderCacheGrowth faster
    • 448c44f http2: remove clientTester
    • c7877ac http2: convert the remaining clientTester tests to testClientConn
    • d8870b0 http2: use synthetic time in TestIdleConnTimeout
    • d73acff http2: only set up deadline when Server.IdleTimeout is positive
    • 89f602b http2: validate client/outgoing trailers
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang.org/x/net&package-manager=go_modules&previous-version=0.19.0&new-version=0.23.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- vulnfeeds/go.mod | 6 +++--- vulnfeeds/go.sum | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/vulnfeeds/go.mod b/vulnfeeds/go.mod index fef6988e86c..576c5910eb2 100644 --- a/vulnfeeds/go.mod +++ b/vulnfeeds/go.mod @@ -45,12 +45,12 @@ require ( github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.13.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/vulnfeeds/go.sum b/vulnfeeds/go.sum index 70b269f05b1..4ef60197945 100644 --- a/vulnfeeds/go.sum +++ b/vulnfeeds/go.sum @@ -157,8 +157,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No= golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= @@ -182,8 +182,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= @@ -210,15 +210,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= From ae5a8f8466515cb17204ce19507b51702ae8b38b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 03:44:43 +1000 Subject: [PATCH 44/56] chore(deps): Bump golang.org/x/net from 0.19.0 to 0.23.0 in /docker/indexer (#2118) Bumps [golang.org/x/net](https://github.com/golang/net) from 0.19.0 to 0.23.0.
    Commits
    • c48da13 http2: fix TestServerContinuationFlood flakes
    • 762b58d http2: fix tipos in comment
    • ba87210 http2: close connections when receiving too many headers
    • ebc8168 all: fix some typos
    • 3678185 http2: make TestCanonicalHeaderCacheGrowth faster
    • 448c44f http2: remove clientTester
    • c7877ac http2: convert the remaining clientTester tests to testClientConn
    • d8870b0 http2: use synthetic time in TestIdleConnTimeout
    • d73acff http2: only set up deadline when Server.IdleTimeout is positive
    • 89f602b http2: validate client/outgoing trailers
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang.org/x/net&package-manager=go_modules&previous-version=0.19.0&new-version=0.23.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docker/indexer/go.mod | 6 +++--- docker/indexer/go.sum | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docker/indexer/go.mod b/docker/indexer/go.mod index a8bcaf3e4b3..67cc8ae3960 100644 --- a/docker/indexer/go.mod +++ b/docker/indexer/go.mod @@ -40,11 +40,11 @@ require ( github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.13.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/docker/indexer/go.sum b/docker/indexer/go.sum index 9cddf72056d..65021fd233e 100644 --- a/docker/indexer/go.sum +++ b/docker/indexer/go.sum @@ -145,8 +145,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -168,8 +168,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= @@ -196,15 +196,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= From c341db45db96622846dbab396ecda7484be10c67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 03:44:54 +1000 Subject: [PATCH 45/56] chore(deps): Bump golang.org/x/net from 0.19.0 to 0.23.0 in /tools/datastore-remover (#2119) Bumps [golang.org/x/net](https://github.com/golang/net) from 0.19.0 to 0.23.0.
    Commits
    • c48da13 http2: fix TestServerContinuationFlood flakes
    • 762b58d http2: fix tipos in comment
    • ba87210 http2: close connections when receiving too many headers
    • ebc8168 all: fix some typos
    • 3678185 http2: make TestCanonicalHeaderCacheGrowth faster
    • 448c44f http2: remove clientTester
    • c7877ac http2: convert the remaining clientTester tests to testClientConn
    • d8870b0 http2: use synthetic time in TestIdleConnTimeout
    • d73acff http2: only set up deadline when Server.IdleTimeout is positive
    • 89f602b http2: validate client/outgoing trailers
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang.org/x/net&package-manager=go_modules&previous-version=0.19.0&new-version=0.23.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/google/osv.dev/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/datastore-remover/go.mod | 6 +++--- tools/datastore-remover/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/datastore-remover/go.mod b/tools/datastore-remover/go.mod index 080361f9807..64cf72592f5 100644 --- a/tools/datastore-remover/go.mod +++ b/tools/datastore-remover/go.mod @@ -17,11 +17,11 @@ require ( github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.17.0 // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.13.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/tools/datastore-remover/go.sum b/tools/datastore-remover/go.sum index 768d7181283..7840206c4a6 100644 --- a/tools/datastore-remover/go.sum +++ b/tools/datastore-remover/go.sum @@ -65,8 +65,8 @@ go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -81,8 +81,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= @@ -100,8 +100,8 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= From 4718477b0d9c50d47f3eb65bb81fa81e3f9247af Mon Sep 17 00:00:00 2001 From: Holly Gong <39108850+hogo6002@users.noreply.github.com> Date: Sun, 21 Apr 2024 22:46:37 -0700 Subject: [PATCH 46/56] Sort Debian OSV pkgInfos (#2120) - Sorts the Debian OSV outputs to remain consistent each runs (https://github.com/google/osv.dev/issues/2103) - Fixes the `AffectedVersions` - modifies `first_package_finder.py` to support future Debian releases, like Debian 13. --- vulnfeeds/cmd/debian/main.go | 50 ++++++++++++++----- vulnfeeds/cmd/debian/main_test.go | 5 +- .../parts/debian/CVE-2016-1585.debian.json | 37 +++++++++++--- .../parts/debian/CVE-2018-1000500.debian.json | 42 ++++++++++++---- .../debian_converter/first_package_finder.py | 4 +- 5 files changed, 105 insertions(+), 33 deletions(-) diff --git a/vulnfeeds/cmd/debian/main.go b/vulnfeeds/cmd/debian/main.go index e11256d56f5..0079ab4bb5c 100644 --- a/vulnfeeds/cmd/debian/main.go +++ b/vulnfeeds/cmd/debian/main.go @@ -6,6 +6,8 @@ import ( "net/http" "os" "path" + "sort" + "strconv" "github.com/google/osv/vulnfeeds/cves" "github.com/google/osv/vulnfeeds/utility" @@ -81,10 +83,9 @@ func getDebianReleaseMap() (map[string]string, error) { } for _, row := range data[1:] { - if row[seriesIndex] == "experimental" || row[seriesIndex] == "sid" { + if row[versionIndex] == "" { continue } - releaseMap[row[seriesIndex]] = row[versionIndex] } @@ -92,14 +93,19 @@ func getDebianReleaseMap() (map[string]string, error) { } // updateOSVPkgInfos adds new release entries to osvPkgInfos. -func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release, osvPkgInfos map[string][]vulns.PackageInfo, debianReleaseMap map[string]string) { +func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release, osvPkgInfos map[string][]vulns.PackageInfo, debianReleaseMap map[string]string, releaseNames []string) { var pkgInfos []vulns.PackageInfo if value, ok := osvPkgInfos[cveId]; ok { pkgInfos = value } - for releaseName, release := range releases { + + for _, releaseName := range releaseNames { // Skips 'not yet assigned' entries because their status may change in the future. // For reference on urgency levels, see: https://security-team.debian.org/security_tracker.html#severity-levels + release, ok := releases[releaseName] + if !ok { + continue + } if release.Urgency == "not yet assigned" { continue } @@ -114,17 +120,14 @@ func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release } pkgInfo.EcosystemSpecific = make(map[string]string) + pkgInfo.VersionInfo = cves.VersionInfo{ + AffectedVersions: []cves.AffectedVersion{{Introduced: "0"}}, + } if release.Status == "resolved" { if release.FixedVersion == "0" { // not affected continue } - pkgInfo.VersionInfo = cves.VersionInfo{ - AffectedVersions: []cves.AffectedVersion{{Introduced: "0", Fixed: release.FixedVersion}}, - } - } else { - pkgInfo.VersionInfo = cves.VersionInfo{ - AffectedVersions: []cves.AffectedVersion{{Introduced: "0"}}, - } + pkgInfo.VersionInfo.AffectedVersions = append(pkgInfo.VersionInfo.AffectedVersions, cves.AffectedVersion{Fixed: release.FixedVersion}) } pkgInfo.EcosystemSpecific["urgency"] = release.Urgency pkgInfos = append(pkgInfos, pkgInfo) @@ -138,9 +141,30 @@ func updateOSVPkgInfos(pkgName string, cveId string, releases map[string]Release func generateDebianSecurityTrackerOSV(debianData DebianSecurityTrackerData, debianReleaseMap map[string]string) map[string][]vulns.PackageInfo { Logger.Infof("Converting Debian Security Tracker data to OSV package infos.") osvPkgInfos := make(map[string][]vulns.PackageInfo) - for pkgName, pkg := range debianData { + + // Sorts packages to ensure results remain consistent between runs. + var pkgNames []string + for name := range debianData { + pkgNames = append(pkgNames, name) + } + sort.Strings(pkgNames) + + // Sorts releases to ensure pkgInfos remain consistent between runs. + releaseNames := make([]string, 0, len(debianReleaseMap)) + for k := range debianReleaseMap { + releaseNames = append(releaseNames, k) + } + + sort.Slice(releaseNames, func(i, j int) bool { + vi, _ := strconv.ParseFloat(debianReleaseMap[releaseNames[i]], 64) + vj, _ := strconv.ParseFloat(debianReleaseMap[releaseNames[j]], 64) + return vi < vj + }) + + for _, pkgName := range pkgNames { + pkg := debianData[pkgName] for cveId, cve := range pkg { - updateOSVPkgInfos(pkgName, cveId, cve.Releases, osvPkgInfos, debianReleaseMap) + updateOSVPkgInfos(pkgName, cveId, cve.Releases, osvPkgInfos, debianReleaseMap, releaseNames) } } diff --git a/vulnfeeds/cmd/debian/main_test.go b/vulnfeeds/cmd/debian/main_test.go index 50af4ac959c..9f02f9e31b9 100644 --- a/vulnfeeds/cmd/debian/main_test.go +++ b/vulnfeeds/cmd/debian/main_test.go @@ -18,11 +18,12 @@ func Test_generateDebianSecurityTrackerOSV(t *testing.T) { _ = json.NewDecoder(file).Decode(&decodedDebianData) debianReleaseMap := make(map[string]string) + debianReleaseMap["trixie"] = "13" debianReleaseMap["buster"] = "10" debianReleaseMap["bullseye"] = "11" debianReleaseMap["bookworm"] = "12" - debianReleaseMap["trixie"] = "13" - debianReleaseMap["forky"] = "14" + debianReleaseMap["sarge"] = "3.1" + debianReleaseMap["stretch"] = "9" osvPkgInfos := generateDebianSecurityTrackerOSV(decodedDebianData, debianReleaseMap) expectedCount := 2 diff --git a/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json b/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json index 9bb8f68d76a..793921c348d 100644 --- a/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json +++ b/vulnfeeds/test_data/parts/debian/CVE-2016-1585.debian.json @@ -1,33 +1,54 @@ [ { "pkg_name": "apparmor", - "ecosystem": "Debian12", - "fixed_version": {}, + "ecosystem": "Debian:10", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { "urgency": "unimportant" } }, { "pkg_name": "apparmor", - "ecosystem": "Debian11", - "fixed_version": {}, + "ecosystem": "Debian:11", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { "urgency": "unimportant" } }, { "pkg_name": "apparmor", - "ecosystem": "Debian10", - "fixed_version": {}, + "ecosystem": "Debian:12", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { "urgency": "unimportant" } }, { "pkg_name": "apparmor", - "ecosystem": "Debian13", + "ecosystem": "Debian:13", "fixed_version": { "affected_versions": [ + { + "introduced": "0" + }, { "fixed": "3.0.12-1" } @@ -37,4 +58,4 @@ "urgency": "unimportant" } } -] \ No newline at end of file +] diff --git a/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json b/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json index 918345b3986..af15b8e62fd 100644 --- a/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json +++ b/vulnfeeds/test_data/parts/debian/CVE-2018-1000500.debian.json @@ -1,32 +1,56 @@ [ { "pkg_name": "busybox", - "ecosystem": "Debian10", - "fixed_version": {}, + "ecosystem": "Debian:10", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { - "urgency": "unimportant" + "urgency": "end-of-life" } }, { "pkg_name": "busybox", - "ecosystem": "Debian13", - "fixed_version": {}, + "ecosystem": "Debian:11", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { "urgency": "unimportant" } }, { "pkg_name": "busybox", - "ecosystem": "Debian12", - "fixed_version": {}, + "ecosystem": "Debian:12", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { "urgency": "unimportant" } }, { "pkg_name": "busybox", - "ecosystem": "Debian11", - "fixed_version": {}, + "ecosystem": "Debian:13", + "fixed_version": { + "affected_versions": [ + { + "introduced": "0" + } + ] + }, "ecosystem_specific": { "urgency": "unimportant" } diff --git a/vulnfeeds/tools/debian/debian_converter/first_package_finder.py b/vulnfeeds/tools/debian/debian_converter/first_package_finder.py index 8d3591acc25..a259ef0f0a5 100644 --- a/vulnfeeds/tools/debian/debian_converter/first_package_finder.py +++ b/vulnfeeds/tools/debian/debian_converter/first_package_finder.py @@ -71,7 +71,9 @@ def retrieve_codename_to_version() -> pd.DataFrame: df = pd.read_csv(csv, dtype=str) # `series` appears to be `codename` but with no caps df['sources'] = '' - df.dropna(subset=['release'], inplace=True) + df.dropna(subset=['version'], inplace=True) + # Set `release` to `created` if not yet released + df['release'] = df['release'].fillna(df['created']) codename_to_version = df.set_index('series') return codename_to_version From 2ff9c1e44dfa73e3b1c055a9003dba360412f88d Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Tue, 23 Apr 2024 13:47:27 +1000 Subject: [PATCH 47/56] Workaround for Bioconductor test breakage (#2130) Enumeration seems to be failing for Bioconductor 3.19: ``` $ GET https://packagemanager.posit.co/__api__/repos/4/packages/a4?bioc_version=3.19 {"code":4,"error":"Package 'a4' not found","payload":null} ``` but works for 3.18 and 3.1 (the bounds of the array returned by `get_bioc_versions()`) /cc @tylfin for visibility --- osv/ecosystems/bioconductor.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osv/ecosystems/bioconductor.py b/osv/ecosystems/bioconductor.py index 353f677de6a..07b8a8c0a6d 100644 --- a/osv/ecosystems/bioconductor.py +++ b/osv/ecosystems/bioconductor.py @@ -57,6 +57,12 @@ def _enumerate_versions(self, """Helper method to enumerate versions from a specific URL.""" versions = [] + # Currently breaking on 3.19, + # see https://github.com/google/osv.dev/pull/1477/files#r1575458933 + try: + bioc_versions = bioc_versions.remove('3.19') + except ValueError: + pass for version in bioc_versions: response = requests.get( url.format(package=package, bioc_version=version), From 2e8b938d7d0e4efc789d83d1375f1740dae836bd Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Tue, 23 Apr 2024 14:30:17 +1000 Subject: [PATCH 48/56] Correct late breaking change (#2131) I even confirmed that list.remove() is an in-place operation, then must of gotten distracted making the actual change :-( I feel great shame. --- osv/ecosystems/bioconductor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osv/ecosystems/bioconductor.py b/osv/ecosystems/bioconductor.py index 07b8a8c0a6d..fb58cdd2df0 100644 --- a/osv/ecosystems/bioconductor.py +++ b/osv/ecosystems/bioconductor.py @@ -60,7 +60,7 @@ def _enumerate_versions(self, # Currently breaking on 3.19, # see https://github.com/google/osv.dev/pull/1477/files#r1575458933 try: - bioc_versions = bioc_versions.remove('3.19') + bioc_versions.remove('3.19') except ValueError: pass for version in bioc_versions: From af27d7598cf28d89e87f5377f5b2ff379567bf6f Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Tue, 23 Apr 2024 14:52:29 +1000 Subject: [PATCH 49/56] Fix querying by commit integration test (#2129) 60e572dbf7b4ded66b488f54773f66aaf6184321 now also matches CVE-2024-31745 --- gcp/api/integration_tests.py | 61 +++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/gcp/api/integration_tests.py b/gcp/api/integration_tests.py index 4c0e84d8b5e..5bcb36e4654 100644 --- a/gcp/api/integration_tests.py +++ b/gcp/api/integration_tests.py @@ -95,6 +95,64 @@ class IntegrationTests(unittest.TestCase, 'summary': 'Heap-use-after-free in dwarf_dealloc', } + _VULN_31745 = { + 'id': 'CVE-2024-31745', + 'details': + ('Libdwarf v0.9.1 was discovered to contain a heap use-after-free ' + 'via the dw_empty_errlist_item function at /libdwarf/dwarf_alloc.c.' + ), + 'modified': '2024-04-20T01:04:38.640360Z', + 'published': '2024-04-19T13:15:13Z', + 'references': [{ + 'type': + 'FIX', + 'url': ('https://github.com/davea42/libdwarf-code/commit/' + '404e6b1b14f60c81388d50b4239f81d461b3c3ad') + }, { + 'type': 'REPORT', + 'url': 'https://github.com/davea42/libdwarf-code/issues/238' + }], + 'affected': [{ + 'ranges': [{ + 'type': + 'GIT', + 'repo': + 'https://github.com/davea42/libdwarf-code', + 'events': [{ + 'introduced': '0' + }, { + 'fixed': '404e6b1b14f60c81388d50b4239f81d461b3c3ad' + }] + }], + 'versions': [ + '20110113', '20110605', '20110607', '20110612', '20110908', + '20111009', '20111030', '20111214', '20120410', '20121127', + '20121130', '20130125', '20130126', '20130207', '20130729', + '20130729-b', '20140131', '20140208', '20140413', '20140519', + '20140805', '20150112', '20150115', '20150310', '20150507', + '20150913', '20150915', '20151114', '20160116', '20160507', + '20160613', '20160923', '20160929', '20161001', '20161021', + '20161124', '20170416', '20170709', '20180129', '20180527', + '20180723', '20180724', '20180809', '20181024', '20190104', + '20190110', '20190505', '20190529', '20191002', '20191104', + '20200114', '20200703', '20200719', '20200825', '20201020', + '20201201', '20210305', '20210528', 'libdwarf-0.1.1', + 'libdwarf-0.2.0', 'libdwarf-0.3.0', 'libdwarf-0.3.1', + 'libdwarf-0.3.2', 'libdwarf-0.3.3', 'libdwarf-0.3.4', + 'libdwarf-0.4.0', 'libdwarf-0.4.1', 'libdwarf-0.4.2', + 'libdwarf-0.5.0', 'libdwarf-0.6.0', 'libdwarf-0.7.0', + 'libdwarf-0.8.0-fixedtag', 'libdwarf-0.9.0', 'libdwarf-0.9.1', + 'v0.3.4', 'v0.4.0', 'v0.4.1', 'v0.4.2', 'v0.5.0', 'v0.6.0', + 'v0.7.0', 'v0.8.0', 'v0.8.0-fixedtag', 'v0.9.0', 'v0.9.1' + ], + 'database_specific': { + 'source': ('https://storage.googleapis.com/cve-osv-conversion/' + 'osv-output/CVE-2024-31745.json') + } + }], + 'schema_version': '1.6.0' + } + _VULN_744 = { 'published': '2020-07-04T00:00:01.948828Z', 'schema_version': '1.6.0', @@ -201,7 +259,8 @@ def test_query_commit(self): 'commit': '60e572dbf7b4ded66b488f54773f66aaf6184321', }), timeout=_TIMEOUT) - self.assert_results_equal({'vulns': [self._VULN_890]}, response.json()) + self.assert_results_equal({'vulns': [self._VULN_31745, self._VULN_890]}, + response.json()) def test_query_version(self): """Test querying by version.""" From 37ff0ade05efc2d7d22c720973bf91dac763d53a Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Tue, 23 Apr 2024 15:35:55 +1000 Subject: [PATCH 50/56] Sanity check to prevent duplicate commits (#2127) This adds a check for the same commit being added to more than once when converting versions to commits. #1984 surfaced that OpenSSL CVEs are being converted with the same commit as both `introduced` and `fixed` (due to incorrect normalization of OpenSSL versions). While the underlying defect is being addressed, add some sanity checking so that if the same commit hash can't be added to a GIT range being generated when converting versions to commits. --- vulnfeeds/cmd/nvd-cve-osv/main.go | 19 ++++++-- vulnfeeds/cves/versions.go | 79 ++++++++++++++++++++++--------- 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/vulnfeeds/cmd/nvd-cve-osv/main.go b/vulnfeeds/cmd/nvd-cve-osv/main.go index 1f97bef7dd3..e902ebbe26d 100644 --- a/vulnfeeds/cmd/nvd-cve-osv/main.go +++ b/vulnfeeds/cmd/nvd-cve-osv/main.go @@ -131,6 +131,7 @@ func InScopeGitRepo(repoURL string) bool { // Examines repos and tries to convert versions to commits by treating them as Git tags. // Takes a CVE ID string (for logging), cves.VersionInfo with AffectedVersions and // typically no AffectedCommits and attempts to add AffectedCommits (including Fixed commits) where there aren't any. +// Refuses to add the same commit to AffectedCommits more than once. func GitVersionsToCommits(CVE cves.CVEID, versions cves.VersionInfo, repos []string, cache git.RepoTagsCache) (v cves.VersionInfo, e error) { // versions is a VersionInfo with AffectedVersions and typically no AffectedCommits // v is a VersionInfo with AffectedCommits (containing Fixed commits) included @@ -148,7 +149,11 @@ func GitVersionsToCommits(CVE cves.CVEID, versions cves.VersionInfo, repos []str Logger.Warnf("[%s]: Failed to get a Git commit for introduced version %q from %q: %v", CVE, av.Introduced, repo, err) } else { Logger.Infof("[%s]: Successfully derived %+v for introduced version %q", CVE, ac, av.Introduced) - v.AffectedCommits = append(v.AffectedCommits, ac) + if v.Duplicated(ac) { + Logger.Warnf("[%s]: Duplicate: %#v already present in %#v", CVE, ac, v) + } else { + v.AffectedCommits = append(v.AffectedCommits, ac) + } } } // Only try and convert fixed versions to commits via tags if there aren't any Fixed commits already. @@ -163,7 +168,11 @@ func GitVersionsToCommits(CVE cves.CVEID, versions cves.VersionInfo, repos []str Logger.Warnf("[%s]: Failed to get a Git commit for fixed version %q from %q: %v", CVE, av.Fixed, repo, err) } else { Logger.Infof("[%s]: Successfully derived %+v for fixed version %q", CVE, ac, av.Fixed) - v.AffectedCommits = append(v.AffectedCommits, ac) + if v.Duplicated(ac) { + Logger.Warnf("[%s]: Duplicate: %#v already present in %#v", CVE, ac, v) + } else { + v.AffectedCommits = append(v.AffectedCommits, ac) + } } } // Only try and convert last_affected versions to commits via tags if there aren't any Fixed commits already (to maintain schema compliance). @@ -175,7 +184,11 @@ func GitVersionsToCommits(CVE cves.CVEID, versions cves.VersionInfo, repos []str Logger.Warnf("[%s]: Failed to get a Git commit for last_affected version %q from %q: %v", CVE, av.LastAffected, repo, err) } else { Logger.Infof("[%s]: Successfully derived %+v for last_affected version %q", CVE, ac, av.LastAffected) - v.AffectedCommits = append(v.AffectedCommits, ac) + if v.Duplicated(ac) { + Logger.Warnf("[%s]: Duplicate: %#v already present in %#v", CVE, ac, v) + } else { + v.AffectedCommits = append(v.AffectedCommits, ac) + } } } } diff --git a/vulnfeeds/cves/versions.go b/vulnfeeds/cves/versions.go index 54963cf4617..9fbd3526ec6 100644 --- a/vulnfeeds/cves/versions.go +++ b/vulnfeeds/cves/versions.go @@ -21,6 +21,7 @@ import ( "net/http" "net/url" "path" + "reflect" "regexp" "strings" "time" @@ -88,8 +89,8 @@ func (vi *VersionInfo) HasLastAffectedVersions() bool { } func (vi *VersionInfo) HasIntroducedCommits(repo string) bool { - for _, av := range vi.AffectedCommits { - if av.Repo == repo && av.Introduced != "" { + for _, ac := range vi.AffectedCommits { + if ac.Repo == repo && ac.Introduced != "" { return true } } @@ -97,8 +98,8 @@ func (vi *VersionInfo) HasIntroducedCommits(repo string) bool { } func (vi *VersionInfo) HasFixedCommits(repo string) bool { - for _, av := range vi.AffectedCommits { - if av.Repo == repo && av.Fixed != "" { + for _, ac := range vi.AffectedCommits { + if ac.Repo == repo && ac.Fixed != "" { return true } } @@ -106,8 +107,8 @@ func (vi *VersionInfo) HasFixedCommits(repo string) bool { } func (vi *VersionInfo) HasLastAffectedCommits(repo string) bool { - for _, av := range vi.AffectedCommits { - if av.Repo == repo && av.LastAffected != "" { + for _, ac := range vi.AffectedCommits { + if ac.Repo == repo && ac.LastAffected != "" { return true } } @@ -115,23 +116,55 @@ func (vi *VersionInfo) HasLastAffectedCommits(repo string) bool { } func (vi *VersionInfo) FixedCommits(repo string) (FixedCommits []string) { - for _, av := range vi.AffectedCommits { - if av.Repo == repo && av.Fixed != "" { - FixedCommits = append(FixedCommits, av.Fixed) + for _, ac := range vi.AffectedCommits { + if ac.Repo == repo && ac.Fixed != "" { + FixedCommits = append(FixedCommits, ac.Fixed) } } return FixedCommits } func (vi *VersionInfo) LastAffectedCommits(repo string) (LastAffectedCommits []string) { - for _, av := range vi.AffectedCommits { - if av.Repo == repo && av.LastAffected != "" { - LastAffectedCommits = append(LastAffectedCommits, av.Fixed) + for _, ac := range vi.AffectedCommits { + if ac.Repo == repo && ac.LastAffected != "" { + LastAffectedCommits = append(LastAffectedCommits, ac.Fixed) } } return LastAffectedCommits } +// Check if the same commit appears in multiple fields of the AffectedCommits array. +// See https://github.com/google/osv.dev/issues/1984 for more context. +func (vi *VersionInfo) Duplicated(candidate AffectedCommit) bool { + fieldsToCheck := []string{"Introduced", "LastAffected", "Limit", "Fixed"} + + // Get the commit hash to look for. + v := reflect.ValueOf(&candidate).Elem() + + commit := "" + for _, field := range fieldsToCheck { + commit = v.FieldByName(field).String() + if commit != "" { + break + } + } + if commit == "" { + return false + } + + // Look through what is already present. + for _, ac := range vi.AffectedCommits { + v = reflect.ValueOf(&ac).Elem() + for _, field := range fieldsToCheck { + existingCommit := v.FieldByName(field).String() + if existingCommit == commit { + return true + } + } + } + return false +} + // Synthetic enum of supported commit types. type CommitType int @@ -492,18 +525,18 @@ var ( ) func repoGitWeb(parsedURL *url.URL) (string, error) { - params := strings.Split(parsedURL.RawQuery, ";") - for _, param := range params { - if !strings.HasPrefix(param, "p=") { - continue - } - repo, err := url.JoinPath(strings.TrimSuffix(strings.TrimSuffix(parsedURL.Path, "/gitweb.cgi"), "cgi-bin"), strings.Split(param, "=")[1]) - if err != nil { - return "", err - } - return fmt.Sprintf("git://%s%s", parsedURL.Hostname(), repo), nil + params := strings.Split(parsedURL.RawQuery, ";") + for _, param := range params { + if !strings.HasPrefix(param, "p=") { + continue } - return "", fmt.Errorf("unsupported GitWeb URL: %s", parsedURL.String()) + repo, err := url.JoinPath(strings.TrimSuffix(strings.TrimSuffix(parsedURL.Path, "/gitweb.cgi"), "cgi-bin"), strings.Split(param, "=")[1]) + if err != nil { + return "", err + } + return fmt.Sprintf("git://%s%s", parsedURL.Hostname(), repo), nil + } + return "", fmt.Errorf("unsupported GitWeb URL: %s", parsedURL.String()) } // Returns the base repository URL for supported repository hosts. From bc61579a635c9525a163775e42ae23886960ed7f Mon Sep 17 00:00:00 2001 From: Andrew Pollock Date: Tue, 23 Apr 2024 16:03:46 +1000 Subject: [PATCH 51/56] Surface the text from the OSV elevator pitch (#2112) This can be referenced in the upcoming blog for USNs. --- docs/index.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/index.md b/docs/index.md index 1f7eeb1edc0..1c6064839f4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,14 +6,16 @@ nav_order: 1 [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/google/osv.dev/badge)](https://api.securityscorecards.dev/projects/github.com/google/osv.dev) -[osv.dev](https://osv.dev) is a [vulnerability database](https://osv.dev/list) -and triage infrastructure for open source projects aimed at helping both open -source maintainers and consumers of open source. +OSV enables developers to identify known third-party open source dependency +vulnerabilities that pose genuine risk to their application and its environment, +so they can focus remediation efforts on the vulnerabilities that matter and +sustainably manage vulnerabilities that do not affect them. [This repository](https://github.com/google/osv.dev) contains the infrastructure -code that serves [osv.dev](https://osv.dev) (and other user tooling). This -infrastructure serves as an aggregator of vulnerability databases that have -adopted the [OpenSSF Vulnerability format](https://github.com/ossf/osv-schema). +code that serves [osv.dev](https://osv.dev) (including the +[API](https://google.github.io/osv.dev/api/)). This infrastructure serves as an +aggregator of vulnerability databases that have adopted the [OpenSSF +Vulnerability format](https://github.com/ossf/osv-schema). [osv.dev](https://osv.dev) additionally provides infrastructure to ensure affected versions are accurately represented in each vulnerability entry, @@ -22,6 +24,9 @@ through bisection and version analysis. Further information on the infrastructure architecture is available [here](contributing/architecture.md). +[OSV-Scanner](https://google.github.io/osv-scanner/) is the first-party tool +that leverages OSV.dev's data, using its API. + ![This is a diagram that shows the relationship between the vulnerability databases that use the OSV format and how all those entries are collated at OSV.dev. Open source users can query for known vulnerabilities by version number From 5b53498365a9332dc7b79ff39103dee6f262e30d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 03:51:16 +0200 Subject: [PATCH 52/56] chore(deps): lock file maintenance (#2121) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- Pipfile.lock | 367 +++++++++++++++++++++++++-------------------------- 1 file changed, 183 insertions(+), 184 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 12407df21f1..c1671bd55bc 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -376,78 +376,77 @@ }, "grpcio": { "hashes": [ - "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", - "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", - "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", - "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", - "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", - "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", - "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", - "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", - "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", - "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", - "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", - "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", - "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", - "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", - "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", - "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", - "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", - "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", - "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", - "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", - "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", - "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", - "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", - "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", - "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", - "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", - "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", - "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", - "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", - "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", - "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", - "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", - "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", - "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", - "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", - "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", - "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", - "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", - "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", - "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", - "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", - "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", - "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", - "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", - "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", - "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", - "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", - "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", - "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", - "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", - "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", - "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", - "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", - "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" + "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f", + "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200", + "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b", + "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f", + "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad", + "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36", + "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063", + "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467", + "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6", + "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811", + "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75", + "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05", + "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a", + "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43", + "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd", + "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc", + "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033", + "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1", + "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9", + "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9", + "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138", + "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5", + "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5", + "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f", + "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d", + "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051", + "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930", + "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2", + "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10", + "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a", + "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f", + "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4", + "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b", + "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c", + "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d", + "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9", + "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189", + "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199", + "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad", + "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e", + "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3", + "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc", + "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d", + "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049", + "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54", + "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756", + "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad", + "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4", + "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670", + "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea", + "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a", + "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1", + "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479", + "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-status": { "hashes": [ - "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77", - "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17" + "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f", + "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a" ], - "version": "==1.62.1" + "version": "==1.62.2" }, "idna": { "hashes": [ "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], - "index": "pypi", "markers": "python_version >= '3.5'", "version": "==3.7" }, @@ -641,11 +640,11 @@ }, "redis": { "hashes": [ - "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580", - "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d" + "sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91", + "sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61" ], "markers": "python_version >= '3.7'", - "version": "==5.0.3" + "version": "==5.0.4" }, "referencing": { "hashes": [ @@ -828,133 +827,133 @@ }, "filelock": { "hashes": [ - "sha256:5ffa845303983e7a0b7ae17636509bc97997d58afeafa72fb141a17b152284cb", - "sha256:a79895a25bbefdf55d1a2a0a80968f7dbb28edcd6d4234a0afb3f37ecde4b546" + "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f", + "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4" ], "markers": "python_version >= '3.8'", - "version": "==3.13.3" + "version": "==3.13.4" }, "grpcio": { "hashes": [ - "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", - "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", - "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", - "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", - "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", - "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", - "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", - "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", - "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", - "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", - "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", - "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", - "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", - "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", - "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", - "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", - "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", - "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", - "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", - "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", - "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", - "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", - "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", - "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", - "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", - "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", - "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", - "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", - "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", - "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", - "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", - "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", - "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", - "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", - "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", - "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", - "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", - "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", - "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", - "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", - "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", - "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", - "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", - "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", - "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", - "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", - "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", - "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", - "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", - "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", - "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", - "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", - "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", - "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" + "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f", + "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200", + "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b", + "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f", + "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad", + "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36", + "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063", + "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467", + "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6", + "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811", + "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75", + "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05", + "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a", + "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43", + "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd", + "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc", + "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033", + "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1", + "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9", + "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9", + "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138", + "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5", + "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5", + "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f", + "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d", + "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051", + "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930", + "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2", + "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10", + "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a", + "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f", + "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4", + "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b", + "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c", + "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d", + "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9", + "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189", + "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199", + "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad", + "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e", + "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3", + "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc", + "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d", + "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049", + "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54", + "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756", + "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad", + "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4", + "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670", + "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea", + "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a", + "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1", + "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479", + "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-tools": { "hashes": [ - "sha256:024380536ba71a96cdf736f0954f6ad03f5da609c09edbcc2ca02fdd639e0eed", - "sha256:07af1a6442e2313cff22af93c2c4dd37ae32b5239b38e0d99e2cbf93de65429f", - "sha256:08fecc3c5b4e6dd3278f2b9d12837e423c7dcff551ca1e587018b4a0fc5f8019", - "sha256:0e140bbc08eea8abf51c0274f45fb1e8350220e64758998d7f3c7f985a0b2496", - "sha256:1344a773d2caa9bb7fbea7e879b84f33740c808c34a5bd2a2768e526117a6b44", - "sha256:13b20e269d14ad629ff9a2c9a2450f3dbb119d5948de63b27ffe624fa7aea85a", - "sha256:156d3e1b227c16e903003a56881dbe60e40f2b4bd66f0bc3b27c53e466e6384d", - "sha256:1819fd055c1ae672d1d725ec75eefd1f700c18acba0ed9332202be31d69c401d", - "sha256:2152308e5321cb90fb45aaa84d03d6dedb19735a8779aaf36c624f97b831842d", - "sha256:21f14b99e0cd38ad56754cc0b62b2bf3cf75f9f7fc40647da54669e0da0726fe", - "sha256:22644c90e43d1a888477899af917979e17364fdd6e9bbb92679cd6a54c4d36c3", - "sha256:23eb3d47f78f509fcd201749b1f1e44b76f447913f7fbb3b8bae20f109086295", - "sha256:2744947b6c5e907af21133431809ccca535a037356864e32c122efed8cb9de1f", - "sha256:2b04844a9382f1bde4b4174e476e654ab3976168d2469cb4b29e352f4f35a5aa", - "sha256:2eea1db3748b2f37b4dce84d8e0c15d9bc811094807cabafe7b0ea47f424dfd5", - "sha256:41384c9ee18e61ef20cad2774ef71bd8854b63efce263b5177aa06fccb84df1f", - "sha256:449503213d142f8470b331a1c2f346f8457f16c7fe20f531bc2500e271f7c14c", - "sha256:45d2e6cf04d27286b6f73e6e20ba3f0a1f6d8f5535e5dcb1356200419bb457f4", - "sha256:46ae58e6926773e7315e9005f0f17aacedbc0895a8752bec087d24efa2f1fb21", - "sha256:4c28086df31478023a36f45e50767872ab3aed2419afff09814cb61c88b77db4", - "sha256:50739aaab0c8076ad5957204e71f2e0c9876e11fd8338f7f09de12c2d75163c5", - "sha256:52b185dfc3bf32e70929310367dbc66185afba60492a6a75a9b1141d407e160c", - "sha256:575535d039b97d63e6a9abee626d6c7cd47bd8cb73dd00a5c84a98254a2164a4", - "sha256:598c54318f0326cf5020aa43fc95a15e933aba4a71943d3bff2677d2d21ddfa1", - "sha256:5ad7c5691625a85327e5b683443baf73ae790fd5afc938252041ed5cd665e377", - "sha256:5c38006f7702d2ff52122e4c77a47348709374050c76216e84b30a9f06e45afa", - "sha256:5d7bdea33354b55acf40bb4dd3ba7324d6f1ef6b4a1a4da0807591f8c7e87b9a", - "sha256:5dbe1f7481dd14b6d477b4bace96d275090bc7636b9883975a08b802c94e7b78", - "sha256:63a273b70896d3640b7a883eb4a080c3c263d91662d870a2e9c84b7bbd978e7b", - "sha256:6abd4eb3ccb444383a40156139acc3aaa73745d395139cb6bc8e2a3429e1e627", - "sha256:7444fcab861911525470d398e5638b70d5cbea3b4674a3de92b5c58c5c515d4d", - "sha256:771c051c5ece27ad03e4f2e33624a925f0ad636c01757ab7dbb04a37964af4ba", - "sha256:941f8a5c31986053e75fa466bcfa743c2bf1b513b7978cf1f4ab4e96a8219d27", - "sha256:975ac5fb482c23f3608c16e06a43c8bab4d79c2e2564cdbc25cf753c6e998775", - "sha256:98209c438b38b6f1276dbc27b1c04e346a75bfaafe72a25a548f2dc5ce71d226", - "sha256:999823758e9eacd0095863d06cd6d388be769f80c9abb65cdb11c4f2cfce3fea", - "sha256:9a11bcf609d00cfc9baed77ab308223cabc1f0b22a05774a26dd4c94c0c80f1f", - "sha256:a01e8dcd0f041f6fa6d815c54a2017d032950e310c41d514a8bc041e872c4d12", - "sha256:a4991e5ee8a97ab791296d3bf7e8700b1445635cc1828cc98df945ca1802d7f2", - "sha256:a4fba5b339f4797548591036c9481e6895bf920fab7d3dc664d2697f8fb7c0bf", - "sha256:b76aead9b73f1650a091870fe4e9ed15ac4d8ed136f962042367255199c23594", - "sha256:b9c02c88c77ef6057c6cbeea8922d7c2424aabf46bfc40ddf42a32765ba91061", - "sha256:d03b645852d605f43003020e78fe6d573cae6ee6b944193e36b8b317e7549a20", - "sha256:d1924a6a943df7c73b9ef0048302327c75962b567451479710da729ead241228", - "sha256:d66a5d47eaa427039752fa0a83a425ff2a487b6a0ac30556fd3be2f3a27a0130", - "sha256:dd933b8e0b3c13fe3543d58f849a6a5e0d7987688cb6801834278378c724f695", - "sha256:e643cd14a5d1e59865cba68a5a6f0175d987f36c5f4cb0db80dee9ed60b4c174", - "sha256:ed1f27dc2b2262c8b8d9036276619c1bb18791311c16ccbf1f31b660f2aad7cf", - "sha256:f2b404bcae7e2ef9b0b9803b2a95119eb7507e6dc80ea4a64a78be052c30cebc", - "sha256:f309bdb33a61f8e049480d41498ee2e525cfb5e959958b326abfdf552bf9b9cb", - "sha256:f358effd3c11d66c150e0227f983d54a5cd30e14038566dadcf25f9f6844e6e8", - "sha256:fd5d47707bd6bc2b707ece765c362d2a1d2e8f6cd92b04c99fab49a929f3610c", - "sha256:fdd987a580b4474769adfd40144486f54bcc73838d5ec5d3647a17883ea78e76", - "sha256:fe71ca30aabe42591e84ecb9694c0297dc699cc20c5b24d2cb267fb0fc01f947" + "sha256:04a394cf5e51ba9be412eb9f6c482b6270bd81016e033e8eb7d21b8cc28fe8b5", + "sha256:04c607029ae3660fb1624ed273811ffe09d57d84287d37e63b5b802a35897329", + "sha256:10cc3321704ecd17c93cf68c99c35467a8a97ffaaed53207e9b2da6ae0308ee1", + "sha256:1679b4903aed2dc5bd8cb22a452225b05dc8470a076f14fd703581efc0740cdb", + "sha256:184b4174d4bd82089d706e8223e46c42390a6ebac191073b9772abc77308f9fa", + "sha256:19216e1fb26dbe23d12a810517e1b3fbb8d4f98b1a3fbebeec9d93a79f092de4", + "sha256:19ea69e41c3565932aa28a202d1875ec56786aea46a2eab54a3b28e8a27f9517", + "sha256:1d768a5c07279a4c461ebf52d0cec1c6ca85c6291c71ec2703fe3c3e7e28e8c4", + "sha256:1fe08d2038f2b7c53259b5c49e0ad08c8e0ce2b548d8185993e7ef67e8592cca", + "sha256:217c2ee6a7ce519a55958b8622e21804f6fdb774db08c322f4c9536c35fdce7c", + "sha256:2ce149ea55eadb486a7fb75a20f63ef3ac065ee6a0240ed25f3549ce7954c653", + "sha256:2ed775e844566ce9ce089be9a81a8b928623b8ee5820f5e4d58c1a9d33dfc5ae", + "sha256:3708a747aa4b6b505727282ca887041174e146ae030ebcadaf4c1d346858df62", + "sha256:3a8d6f07e64c0c7756f4e0c4781d9d5a2b9cc9cbd28f7032a6fb8d4f847d0445", + "sha256:3c53b221378b035ae2f1881cbc3aca42a6075a8e90e1a342c2f205eb1d1aa6a1", + "sha256:40cd4eeea4b25bcb6903b82930d579027d034ba944393c4751cdefd9c49e6989", + "sha256:45db5da2bcfa88f2b86b57ef35daaae85c60bd6754a051d35d9449c959925b57", + "sha256:462e0ab8dd7c7b70bfd6e3195eebc177549ede5cf3189814850c76f9a340d7ce", + "sha256:47117c8a7e861382470d0e22d336e5a91fdc5f851d1db44fa784b9acea190d87", + "sha256:472505d030135d73afe4143b0873efe0dcb385bd6d847553b4f3afe07679af00", + "sha256:4f6f32d39283ea834a493fccf0ebe9cfddee7577bdcc27736ad4be1732a36399", + "sha256:4f955702dc4b530696375251319d05223b729ed24e8673c2129f7a75d2caefbb", + "sha256:4f989e5cebead3ae92c6abf6bf7b19949e1563a776aea896ac5933f143f0c45d", + "sha256:58cbb24b3fa6ae35aa9c210fcea3a51aa5fef0cd25618eb4fd94f746d5a9b703", + "sha256:5b07b5874187e170edfbd7aa2ca3a54ebf3b2952487653e8c0b0d83601c33035", + "sha256:5fd5e1582b678e6b941ee5f5809340be5e0724691df5299aae8226640f94e18f", + "sha256:6413581e14a80e0b4532577766cf0586de4dd33766a31b3eb5374a746771c07d", + "sha256:72b61332f1b439c14cbd3815174a8f1d35067a02047c32decd406b3a09bb9890", + "sha256:759c60f24c33a181bbbc1232a6752f9b49fbb1583312a4917e2b389fea0fb0f2", + "sha256:76eb459bdf3fb666e01883270beee18f3f11ed44488486b61cd210b4e0e17cc1", + "sha256:7a49bccae1c7d154b78e991885c3111c9ad8c8fa98e91233de425718f47c6139", + "sha256:7d8b4e00c3d7237b92260fc18a561cd81f1da82e8be100db1b7d816250defc66", + "sha256:7ea369c4d1567d1acdf69c8ea74144f4ccad9e545df7f9a4fc64c94fa7684ba3", + "sha256:8214820990d01b52845f9fbcb92d2b7384a0c321b303e3ac614c219dc7d1d3af", + "sha256:8c616d0ad872e3780693fce6a3ac8ef00fc0963e6d7815ce9dcfae68ba0fc287", + "sha256:987e774f74296842bbffd55ea8826370f70c499e5b5f71a8cf3103838b6ee9c3", + "sha256:9be84ff6d47fd61462be7523b49d7ba01adf67ce4e1447eae37721ab32464dd8", + "sha256:9d41e0e47dd075c075bb8f103422968a65dd0d8dc8613288f573ae91eb1053ba", + "sha256:9f1ba79a253df9e553d20319c615fa2b429684580fa042dba618d7f6649ac7e4", + "sha256:a34d97c62e61bfe9e6cff0410fe144ac8cca2fc979ad0be46b7edf026339d161", + "sha256:a7e439476b29d6dac363b321781a113794397afceeb97dad85349db5f1cb5e9a", + "sha256:ab84bae88597133f6ea7a2bdc57b2fda98a266fe8d8d4763652cbefd20e73ad7", + "sha256:b6746bc823958499a3cf8963cc1de00072962fb5e629f26d658882d3f4c35095", + "sha256:b8574469ecc4ff41d6bb95f44e0297cdb0d95bade388552a9a444db9cd7485cd", + "sha256:bdc5dd3f57b5368d5d661d5d3703bcaa38bceca59d25955dff66244dbc987271", + "sha256:c195d74fe98541178ece7a50dad2197d43991e0f77372b9a88da438be2486f12", + "sha256:c384c838b34d1b67068e51b5bbe49caa6aa3633acd158f1ab16b5da8d226bc53", + "sha256:c48fabe40b9170f4e3d7dd2c252e4f1ff395dc24e49ac15fc724b1b6f11724da", + "sha256:cbb8453ae83a1db2452b7fe0f4b78e4a8dd32be0f2b2b73591ae620d4d784d3d", + "sha256:d58389fe8be206ddfb4fa703db1e24c956856fcb9a81da62b13577b3a8f7fda7", + "sha256:d82f681c9a9d933a9d8068e8e382977768e7779ddb8870fa0cf918d8250d1532", + "sha256:e33b59fb3efdddeb97ded988a871710033e8638534c826567738d3edce528752", + "sha256:ec674b4440ef4311ac1245a709e87b36aca493ddc6850eebe0b278d1f2b6e7d1", + "sha256:fa107460c842e4c1a6266150881694fefd4f33baa544ea9489601810c2210ef8" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "importlib-metadata": { "hashes": [ @@ -991,11 +990,11 @@ }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf", + "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.2.1" }, "protobuf": { "hashes": [ @@ -1025,11 +1024,11 @@ }, "setuptools": { "hashes": [ - "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e", - "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c" + "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", + "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" ], "markers": "python_version >= '3.8'", - "version": "==69.2.0" + "version": "==69.5.1" }, "tomli": { "hashes": [ @@ -1049,11 +1048,11 @@ }, "virtualenv": { "hashes": [ - "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a", - "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197" + "sha256:0846377ea76e818daaa3e00a4365c018bc3ac9760cbb3544de542885aad61fb3", + "sha256:ec25a9671a5102c8d2657f62792a27b48f016664c6873f6beed3800008577210" ], "markers": "python_version >= '3.7'", - "version": "==20.25.1" + "version": "==20.26.0" }, "yapf": { "hashes": [ From 86d5333f7bbaf8cffa13acfbaceca9ee3bb0a59e Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 04:09:37 +0200 Subject: [PATCH 53/56] chore(deps): lock file maintenance (#2122) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- docker/worker/Pipfile.lock | 134 ++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/docker/worker/Pipfile.lock b/docker/worker/Pipfile.lock index 04a81c68a47..a24a70522cb 100644 --- a/docker/worker/Pipfile.lock +++ b/docker/worker/Pipfile.lock @@ -383,79 +383,79 @@ }, "grpcio": { "hashes": [ - "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", - "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", - "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", - "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", - "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", - "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", - "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", - "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", - "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", - "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", - "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", - "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", - "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", - "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", - "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", - "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", - "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", - "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", - "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", - "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", - "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", - "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", - "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", - "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", - "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", - "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", - "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", - "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", - "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", - "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", - "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", - "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", - "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", - "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", - "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", - "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", - "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", - "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", - "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", - "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", - "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", - "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", - "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", - "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", - "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", - "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", - "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", - "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", - "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", - "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", - "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", - "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", - "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", - "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" + "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f", + "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200", + "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b", + "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f", + "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad", + "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36", + "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063", + "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467", + "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6", + "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811", + "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75", + "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05", + "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a", + "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43", + "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd", + "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc", + "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033", + "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1", + "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9", + "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9", + "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138", + "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5", + "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5", + "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f", + "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d", + "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051", + "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930", + "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2", + "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10", + "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a", + "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f", + "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4", + "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b", + "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c", + "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d", + "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9", + "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189", + "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199", + "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad", + "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e", + "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3", + "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc", + "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d", + "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049", + "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54", + "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756", + "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad", + "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4", + "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670", + "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea", + "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a", + "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1", + "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479", + "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b" ], "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-status": { "hashes": [ - "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77", - "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17" + "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f", + "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a" ], "markers": "python_version >= '3.6'", - "version": "==1.62.1" + "version": "==1.62.2" }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.7" }, "jsonschema": { "hashes": [ @@ -650,12 +650,12 @@ }, "redis": { "hashes": [ - "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580", - "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d" + "sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91", + "sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==5.0.3" + "version": "==5.0.4" }, "referencing": { "hashes": [ @@ -846,11 +846,11 @@ }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf", + "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.2.1" }, "pylint": { "hashes": [ From fa48f08bc5705631b3f096ad90ce0a58061ac385 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 04:41:55 +0200 Subject: [PATCH 54/56] chore(deps): lock file maintenance (#2123) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- gcp/api/Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcp/api/Pipfile.lock b/gcp/api/Pipfile.lock index b8eb8b7726f..d3299e18d22 100644 --- a/gcp/api/Pipfile.lock +++ b/gcp/api/Pipfile.lock @@ -586,11 +586,11 @@ }, "redis": { "hashes": [ - "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580", - "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d" + "sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91", + "sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61" ], "markers": "python_version >= '3.7'", - "version": "==5.0.3" + "version": "==5.0.4" }, "referencing": { "hashes": [ From 256aa3b2c7dcc20ff24f7d24d00b915c3fb6d168 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 05:55:45 +0200 Subject: [PATCH 55/56] chore(deps): lock file maintenance appengine-backend (#2125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | | | lockFileMaintenance | All locks refreshed | | | | | | google-auth | packages | minor | `==2.28.1` -> `==2.29.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-auth/2.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-auth/2.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-auth/2.28.1/2.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-auth/2.28.1/2.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | google-cloud-logging | packages | minor | `==3.9.0` -> `==3.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-logging/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-logging/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-logging/3.9.0/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-logging/3.9.0/3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | google-cloud-ndb | packages | patch | `==2.3.0` -> `==2.3.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-ndb/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-ndb/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-ndb/2.3.0/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-ndb/2.3.0/2.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | google-cloud-pubsub | packages | minor | `==2.19.8` -> `==2.21.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-pubsub/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-pubsub/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-pubsub/2.19.8/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-pubsub/2.19.8/2.21.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | grpcio-status | packages | patch | `==1.62.0` -> `==1.62.2` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/grpcio-status/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/grpcio-status/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/grpcio-status/1.62.0/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/grpcio-status/1.62.0/1.62.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | werkzeug | packages | patch | `==3.0.1` -> `==3.0.2` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/werkzeug/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/werkzeug/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/werkzeug/3.0.1/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/werkzeug/3.0.1/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- gcp/appengine/Pipfile | 12 +-- gcp/appengine/Pipfile.lock | 203 ++++++++++++++++--------------------- 2 files changed, 95 insertions(+), 120 deletions(-) diff --git a/gcp/appengine/Pipfile b/gcp/appengine/Pipfile index 85929ed2ad3..207dc2ae562 100644 --- a/gcp/appengine/Pipfile +++ b/gcp/appengine/Pipfile @@ -7,11 +7,11 @@ name = "pypi" Flask = "==2.3.3" Flask-Caching = "==2.1.0" Flask-Compress = "1.13" -werkzeug = "==3.0.1" -google-cloud-ndb = "==2.3.0" -google-auth = "==2.28.1" -google-cloud-logging = "==3.9.0" -google-cloud-pubsub = "==2.19.8" +werkzeug = "==3.0.2" +google-cloud-ndb = "==2.3.1" +google-auth = "==2.29.0" +google-cloud-logging = "==3.10.0" +google-cloud-pubsub = "==2.21.1" jinja2 = "==3.1.3" markdown2 = "==2.4.13" markupsafe = "==2.1.5" @@ -19,7 +19,7 @@ osv = {editable = true, path = "../../"} packaging = "==21.3" redis = "==4.6.0" requests = "==2.31.0" -grpcio-status = "==1.62.0" +grpcio-status = "==1.62.2" gunicorn = "==22.0.0" whitenoise = "6.5.0" diff --git a/gcp/appengine/Pipfile.lock b/gcp/appengine/Pipfile.lock index fb045f8085d..c6055c11c56 100644 --- a/gcp/appengine/Pipfile.lock +++ b/gcp/appengine/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "2f9189caa4c5ff8c863770f0955c17654f05d34695ae42a8c86b9f288a1e7145" + "sha256": "63b3406700d35d0fcb8aa145f2c00993417b555c5a005f6edd56d22b4203059b" }, "pipfile-spec": 6, "requires": { @@ -312,7 +312,7 @@ "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc", "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b" ], - "markers": "python_version >= '3.8'", + "index": "pypi", "version": "==2.3.3" }, "flask-caching": { @@ -320,15 +320,16 @@ "sha256:b7500c145135836a952e3de3a80881d9654e327a29c852c9265607f5c449235c", "sha256:f02645a629a8c89800d96dc8f690a574a0d49dcd66c7536badc6d362ba46b716" ], - "markers": "python_version >= '3.7'", + "index": "pypi", "version": "==2.1.0" }, "flask-compress": { "hashes": [ - "sha256:1128f71fbd788393ce26830c51f8b5a1a7a4d085e79a21a5cddf4c057dcd559b", - "sha256:ee96f18bf9b00f2deb4e3406ca4a05093aa80e2ef0578525a3b4d32ecdff129d" + "sha256:b86c9808f0f38ea2246c9730972cf978f2cdf6a9a1a69102ba81e07891e6b26c", + "sha256:e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee" ], - "version": "==1.13" + "index": "pypi", + "version": "==1.14" }, "google-api-core": { "extras": [ @@ -343,12 +344,11 @@ }, "google-auth": { "hashes": [ - "sha256:25141e2d7a14bfcba945f5e9827f98092716e99482562f15306e5b026e21aa72", - "sha256:34fc3046c257cedcf1622fc4b31fc2be7923d9b4d44973d481125ecc50d83885" + "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360", + "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==2.28.1" + "version": "==2.29.0" }, "google-cloud-appengine-logging": { "hashes": [ @@ -384,35 +384,29 @@ }, "google-cloud-logging": { "hashes": [ - "sha256:094a2db068ff7f38c9e0c1017673fa49c0768fbae02769e03e06baa30f138b87", - "sha256:4decb1b0bed4a0e3c0e58a376646e6002d6be7cad039e3466822e8665072ea33" + "sha256:132192beb45731130a2ffbcd4b2b5cbd87370e7dcfa7397ae4002154f542bd20", + "sha256:d93d347351240ddb14cfe201987a2d32cf9d7f478b8b2fabed3015b425b3274f" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==3.9.0" + "version": "==3.10.0" }, "google-cloud-ndb": { "hashes": [ - "sha256:04a7c0950ac1ad867af66b57c344ff067dd6ecef3ff8f244a70ce9d1991c1dd8", - "sha256:135e0e7766b0b29be8dbcf68f294981057942654c94bcf7faa974677c4e6ab27" + "sha256:3d6c8866681dc280ad9f90a6f5b556d324e4b29173d0b63ddf6b8e19655fec1a", + "sha256:a6a2f6c58bd14febb92c0e569ca6a4e1d14c4a70935c28f3681e33c67402428f" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==2.3.0" + "version": "==2.3.1" }, "google-cloud-pubsub": { "hashes": [ - "sha256:0e302ec702832a9aaf83ad24c0bf56940ab84f90600e45bb6142f70f23f54986", - "sha256:598b944ef6345ab1e881816f5667f0f14244d6a8605be37acc0fae7059602be2" + "sha256:31fcf07444b7f813a616c4b650e1fbf1dc998a088fe0059a76164855ac17f05c", + "sha256:55a3602ec45bc09626604d712032288a8ee3566145cb83523cff908938f69a4b" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==2.19.8" + "version": "==2.21.1" }, "googleapis-common-protos": { - "extras": [ - "grpc" - ], "hashes": [ "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e", "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632" @@ -430,72 +424,71 @@ }, "grpcio": { "hashes": [ - "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4", - "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505", - "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e", - "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49", - "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c", - "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362", - "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f", - "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b", - "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31", - "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41", - "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de", - "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f", - "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db", - "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea", - "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660", - "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f", - "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243", - "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc", - "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd", - "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d", - "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947", - "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a", - "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483", - "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3", - "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2", - "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f", - "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22", - "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66", - "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec", - "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9", - "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407", - "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9", - "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585", - "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7", - "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369", - "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1", - "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9", - "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4", - "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b", - "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d", - "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1", - "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70", - "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332", - "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06", - "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f", - "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7", - "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d", - "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037", - "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd", - "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a", - "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b", - "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de", - "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698", - "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5" + "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f", + "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200", + "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b", + "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f", + "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad", + "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36", + "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063", + "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467", + "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6", + "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811", + "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75", + "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05", + "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a", + "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43", + "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd", + "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc", + "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033", + "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1", + "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9", + "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9", + "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138", + "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5", + "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5", + "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f", + "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d", + "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051", + "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930", + "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2", + "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10", + "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a", + "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f", + "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4", + "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b", + "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c", + "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d", + "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9", + "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189", + "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199", + "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad", + "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e", + "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3", + "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc", + "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d", + "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049", + "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54", + "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756", + "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad", + "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4", + "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670", + "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea", + "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a", + "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1", + "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479", + "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b" ], "markers": "python_version >= '3.7'", - "version": "==1.62.1" + "version": "==1.62.2" }, "grpcio-status": { "hashes": [ - "sha256:0d693e9c09880daeaac060d0c3dba1ae470a43c99e5d20dfeafd62cf7e08a85d", - "sha256:3baac03fcd737310e67758c4082a188107f771d32855bce203331cd4c9aa687a" + "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f", + "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a" ], "index": "pypi", - "markers": "python_version >= '3.6'", - "version": "==1.62.0" + "version": "==1.62.2" }, "gunicorn": { "hashes": [ @@ -503,7 +496,6 @@ "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==22.0.0" }, "idna": { @@ -528,7 +520,6 @@ "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==3.1.3" }, "jsonschema": { @@ -553,7 +544,6 @@ "sha256:855bde5cbcceb9beda7c80efdf7f406c23e6079172c497fcfce22fdce998e892" ], "index": "pypi", - "markers": "python_version >= '3.5' and python_version < '4'", "version": "==2.4.13" }, "markupsafe": { @@ -620,7 +610,6 @@ "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==2.1.5" }, "osv": { @@ -633,7 +622,6 @@ "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], "index": "pypi", - "markers": "python_version >= '3.6'", "version": "==21.3" }, "proto-plus": { @@ -802,7 +790,6 @@ "sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==4.6.0" }, "referencing": { @@ -819,7 +806,6 @@ "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==2.31.0" }, "rpds-py": { @@ -943,14 +929,6 @@ "markers": "python_version >= '3.7'", "version": "==3.0.2" }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" - }, "urllib3": { "hashes": [ "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", @@ -961,21 +939,19 @@ }, "werkzeug": { "hashes": [ - "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc", - "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10" + "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795", + "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.0.1" + "version": "==3.0.2" }, "whitenoise": { "hashes": [ - "sha256:15fe60546ac975b58e357ccaeb165a4ca2d0ab697e48450b8f0307ca368195a8", - "sha256:16468e9ad2189f09f4a8c635a9031cc9bb2cdbc8e5e53365407acf99f7ade9ec" + "sha256:8998f7370973447fac1e8ef6e8ded2c5209a7b1f67c1012866dbcd09681c3251", + "sha256:b1f9db9bf67dc183484d760b99f4080185633136a273a03f6436034a41064146" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==6.5.0" + "version": "==6.6.0" } }, "develop": { @@ -1008,16 +984,15 @@ "sha256:eed9c479d918a809deec23a4136f2b66091f035c849012acca3a9898d5f0938f" ], "index": "pypi", - "markers": "python_version >= '3.7'", "version": "==2022.12.19" }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf", + "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.2.1" }, "setuptools": { "hashes": [ @@ -1029,11 +1004,11 @@ }, "virtualenv": { "hashes": [ - "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be", - "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e" + "sha256:0846377ea76e818daaa3e00a4365c018bc3ac9760cbb3544de542885aad61fb3", + "sha256:ec25a9671a5102c8d2657f62792a27b48f016664c6873f6beed3800008577210" ], "markers": "python_version >= '3.7'", - "version": "==20.25.3" + "version": "==20.26.0" }, "virtualenv-clone": { "hashes": [ From aad1acbb33fc9d54fa6366681d50ccc9da552117 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 24 Apr 2024 06:21:37 +0200 Subject: [PATCH 56/56] chore(deps): lock file maintenance appengine-frontend (#2126) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | | | lockFileMaintenance | All locks refreshed | | | | | | [@github/relative-time-element](https://togithub.com/github/relative-time-element) | dependencies | minor | [`4.3.1` -> `4.4.0`](https://renovatebot.com/diffs/npm/@github%2frelative-time-element/4.3.1/4.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@github%2frelative-time-element/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@github%2frelative-time-element/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@github%2frelative-time-element/4.3.1/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@github%2frelative-time-element/4.3.1/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [css-loader](https://togithub.com/webpack-contrib/css-loader) | devDependencies | minor | [`6.10.0` -> `6.11.0`](https://renovatebot.com/diffs/npm/css-loader/6.10.0/6.11.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/css-loader/6.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/css-loader/6.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/css-loader/6.10.0/6.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/css-loader/6.10.0/6.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [mini-css-extract-plugin](https://togithub.com/webpack-contrib/mini-css-extract-plugin) | devDependencies | minor | [`2.8.0` -> `2.9.0`](https://renovatebot.com/diffs/npm/mini-css-extract-plugin/2.8.0/2.9.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/mini-css-extract-plugin/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/mini-css-extract-plugin/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/mini-css-extract-plugin/2.8.0/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/mini-css-extract-plugin/2.8.0/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [sass](https://togithub.com/sass/dart-sass) | devDependencies | minor | [`1.71.1` -> `1.75.0`](https://renovatebot.com/diffs/npm/sass/1.71.1/1.75.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/sass/1.75.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/sass/1.75.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/sass/1.71.1/1.75.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sass/1.71.1/1.75.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [webpack](https://togithub.com/webpack/webpack) | devDependencies | minor | [`5.90.3` -> `5.91.0`](https://renovatebot.com/diffs/npm/webpack/5.90.3/5.91.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack/5.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack/5.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack/5.90.3/5.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack/5.90.3/5.91.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [webpack-bundle-analyzer](https://togithub.com/webpack-contrib/webpack-bundle-analyzer) | devDependencies | patch | [`4.10.1` -> `4.10.2`](https://renovatebot.com/diffs/npm/webpack-bundle-analyzer/4.10.1/4.10.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack-bundle-analyzer/4.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack-bundle-analyzer/4.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack-bundle-analyzer/4.10.1/4.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack-bundle-analyzer/4.10.1/4.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [webpack-dev-server](https://togithub.com/webpack/webpack-dev-server) | devDependencies | patch | [`4.15.1` -> `4.15.2`](https://renovatebot.com/diffs/npm/webpack-dev-server/4.15.1/4.15.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack-dev-server/4.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack-dev-server/4.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack-dev-server/4.15.1/4.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack-dev-server/4.15.1/4.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | πŸ”§ This Pull Request updates lock files to use the latest dependency versions. --- ### Release Notes
    github/relative-time-element (@​github/relative-time-element) ### [`v4.4.0`](https://togithub.com/github/relative-time-element/releases/tag/v4.4.0) [Compare Source](https://togithub.com/github/relative-time-element/compare/v4.3.1...v4.4.0) #### What's Changed - Bump ip from 1.1.8 to 1.1.9 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/github/relative-time-element/pull/274](https://togithub.com/github/relative-time-element/pull/274) - update lockfile to v3 by [@​keithamus](https://togithub.com/keithamus) in [https://github.com/github/relative-time-element/pull/278](https://togithub.com/github/relative-time-element/pull/278) - Express "0 precision-units away" appropriately for the precision. by [@​jyasskin](https://togithub.com/jyasskin) in [https://github.com/github/relative-time-element/pull/280](https://togithub.com/github/relative-time-element/pull/280) #### New Contributors - [@​jyasskin](https://togithub.com/jyasskin) made their first contribution in [https://github.com/github/relative-time-element/pull/280](https://togithub.com/github/relative-time-element/pull/280) **Full Changelog**: https://github.com/github/relative-time-element/compare/v4.3.1...v4.4.0
    webpack-contrib/css-loader (css-loader) ### [`v6.11.0`](https://togithub.com/webpack-contrib/css-loader/blob/HEAD/CHANGELOG.md#6110-2024-04-03) [Compare Source](https://togithub.com/webpack-contrib/css-loader/compare/v6.10.0...v6.11.0) ##### Features - supports multiple composes ([#​1582](https://togithub.com/webpack-contrib/css-loader/issues/1582)) ([bbca614](https://togithub.com/webpack-contrib/css-loader/commit/bbca61411dc5f82964653a6d1aa27854519b743d)) ##### Bug Fixes - do not break `@scope` at-rule without params ([#​1581](https://togithub.com/webpack-contrib/css-loader/issues/1581)) ([e022e3b](https://togithub.com/webpack-contrib/css-loader/commit/e022e3bb405472ac7d51ff1114783fc2811dfe04))
    webpack-contrib/mini-css-extract-plugin (mini-css-extract-plugin) ### [`v2.9.0`](https://togithub.com/webpack-contrib/mini-css-extract-plugin/blob/HEAD/CHANGELOG.md#290-2024-04-16) [Compare Source](https://togithub.com/webpack-contrib/mini-css-extract-plugin/compare/v2.8.1...v2.9.0) ##### Features - add support for link preload/prefetch ([#​1043](https://togithub.com/webpack-contrib/mini-css-extract-plugin/issues/1043)) ([ee25e51](https://togithub.com/webpack-contrib/mini-css-extract-plugin/commit/ee25e51a8d06292dd8643f5bf1d6c4faa51c4f4c)) - added the `defaultExport` option to generate default and named export together ([#​1084](https://togithub.com/webpack-contrib/mini-css-extract-plugin/issues/1084)) ([74ae781](https://togithub.com/webpack-contrib/mini-css-extract-plugin/commit/74ae78184fb5bfeec23b9d254ff8304c6fc854d6)) ##### Bug Fixes - avoid reloading all csses when hot load ([#​1090](https://togithub.com/webpack-contrib/mini-css-extract-plugin/issues/1090)) ([1a56673](https://togithub.com/webpack-contrib/mini-css-extract-plugin/commit/1a56673d01c441967134beb5d9500a7d6d62e4de)) ##### [2.8.1](https://togithub.com/webpack-contrib/mini-css-extract-plugin/compare/v2.8.0...v2.8.1) (2024-02-27) ##### Bug Fixes - add `nonce` if `__webpack_nonce__` has been defined ([c7f0aee](https://togithub.com/webpack-contrib/mini-css-extract-plugin/commit/c7f0aee5feaa1b8d047f575e94a91662eb8c314c)) ### [`v2.8.1`](https://togithub.com/webpack-contrib/mini-css-extract-plugin/blob/HEAD/CHANGELOG.md#281-2024-02-27) [Compare Source](https://togithub.com/webpack-contrib/mini-css-extract-plugin/compare/v2.8.0...v2.8.1)
    sass/dart-sass (sass) ### [`v1.75.0`](https://togithub.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1750) [Compare Source](https://togithub.com/sass/dart-sass/compare/1.74.1...1.75.0) - Fix a bug in which stylesheet canonicalization could be cached incorrectly when custom importers or the Node.js package importer made decisions based on the URL of the containing stylesheet. ##### JS API - Allow `importer` to be passed without `url` in `StringOptionsWithImporter`. ### [`v1.74.1`](https://togithub.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1741) [Compare Source](https://togithub.com/sass/dart-sass/compare/1.72.0...1.74.1) - No user-visible changes. ### [`v1.72.0`](https://togithub.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1720) [Compare Source](https://togithub.com/sass/dart-sass/compare/1.71.1...1.72.0) - Support adjacent `/`s without whitespace in between when parsing plain CSS expressions. - Allow the Node.js `pkg:` importer to load Sass stylesheets for `package.json` `exports` field entries without extensions. - When printing suggestions for variables, use underscores in variable names when the original usage used underscores. ##### JavaScript API - Properly resolve `pkg:` imports with the Node.js package importer when arguments are passed to the JavaScript process.
    webpack/webpack (webpack) ### [`v5.91.0`](https://togithub.com/webpack/webpack/releases/tag/v5.91.0) [Compare Source](https://togithub.com/webpack/webpack/compare/v5.90.3...v5.91.0) #### Bug Fixes - Deserializer for ignored modules doesn't crash - Allow the `unsafeCache` option to be a proxy object - Normalize the `snapshot.unmanagedPaths` option - Fixed `fs` types - Fixed resolve's plugins types - Fixed wrongly calculate postOrderIndex - Fixed watching types - Output import attrbiutes/import assertions for external JS imports - Throw an error when DllPlugin needs to generate multiple manifest files, but the path is the same - \[CSS] Output `layer`/`supports`/`media` for external CSS imports #### New Features - Allow to customize the stage of BannerPlugin - \[CSS] Support CSS exports convention - \[CSS] support CSS local ident name - \[CSS] Support `__webpack_nonce__` for CSS chunks - \[CSS] Support `fetchPriority` for CSS chunks - \[CSS] Allow to use LZW to compress css head meta (enabled in the `production` mode by default) - \[CSS] Support prefetch/preload for CSS chunks
    webpack-contrib/webpack-bundle-analyzer (webpack-bundle-analyzer) ### [`v4.10.2`](https://togithub.com/webpack-contrib/webpack-bundle-analyzer/blob/HEAD/CHANGELOG.md#4102) [Compare Source](https://togithub.com/webpack-contrib/webpack-bundle-analyzer/compare/v4.10.1...v4.10.2) - **Bug Fix** - fix `.cjs` files not being handled ([#​512](https://togithub.com/webpack-contrib/webpack-bundle-analyzer/pull/512) by [@​Rush](https://togithub.com/Rush)) - **Internal** - Remove `is-plain-object` ([#​627](https://togithub.com/webpack-contrib/webpack-bundle-analyzer/pull/627) by [@​SukkaW](https://togithub.com/SukkaW))
    webpack/webpack-dev-server (webpack-dev-server) ### [`v4.15.2`](https://togithub.com/webpack/webpack-dev-server/releases/tag/v4.15.2) [Compare Source](https://togithub.com/webpack/webpack-dev-server/compare/v4.15.1...v4.15.2) ##### [4.15.2](https://togithub.com/webpack/webpack-dev-server/compare/v4.15.1...v4.15.2) (2024-03-20) ##### Bug Fixes - **security:** bump webpack-dev-middleware ([4116209](https://togithub.com/webpack/webpack-dev-server/commit/411620997594d24cd1f788e8533a5c6fa2736143))
    --- ### Configuration πŸ“… **Schedule**: Branch creation - "before 4am on monday" in timezone Australia/Sydney, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/google/osv.dev). --- gcp/appengine/frontend3/package-lock.json | 198 +++++++++++----------- gcp/appengine/frontend3/package.json | 14 +- 2 files changed, 105 insertions(+), 107 deletions(-) diff --git a/gcp/appengine/frontend3/package-lock.json b/gcp/appengine/frontend3/package-lock.json index f9c02c28924..ec4fe197ade 100644 --- a/gcp/appengine/frontend3/package-lock.json +++ b/gcp/appengine/frontend3/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "dependencies": { "@github/clipboard-copy-element": "1.3.0", - "@github/relative-time-element": "4.3.1", + "@github/relative-time-element": "4.4.0", "@hotwired/turbo": "7.3.0", "@material/data-table": "13.0.0", "@material/layout-grid": "13.0.0", @@ -23,17 +23,17 @@ }, "devDependencies": { "copy-webpack-plugin": "10.2.4", - "css-loader": "6.10.0", + "css-loader": "6.11.0", "html-webpack-plugin": "5.6.0", - "mini-css-extract-plugin": "2.8.0", + "mini-css-extract-plugin": "2.9.0", "raw-loader": "4.0.2", - "sass": "1.71.1", + "sass": "1.75.0", "sass-loader": "12.6.0", "style-loader": "3.3.4", - "webpack": "5.90.3", - "webpack-bundle-analyzer": "4.10.1", + "webpack": "5.91.0", + "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "4.10.0", - "webpack-dev-server": "4.15.1" + "webpack-dev-server": "4.15.2" } }, "node_modules/@discoveryjs/json-ext": { @@ -51,9 +51,9 @@ "integrity": "sha512-wyntkQkwoLbLo+Hqg2LIVMXDIzcvUb9bSDz+clX6nVJItwzh103rHxdXFRZD+DmxVbuEW5xSznYQXkz1jZT+xg==" }, "node_modules/@github/relative-time-element": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.3.1.tgz", - "integrity": "sha512-zL79nlhZVCg7x2Pf/HT5MB0mowmErE71VXpF10/3Wy8dQwkninNO1M9aOizh2wKC5LkSpDXqNYjDZwbH0/bcSg==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.4.0.tgz", + "integrity": "sha512-CrI6oAecoahG7PF5dsgjdvlF5kCtusVMjg810EULD81TvnDsP+k/FRi/ClFubWLgBo4EGpr2EfvmumtqQFo7ow==" }, "node_modules/@hotwired/turbo": { "version": "7.3.0", @@ -122,9 +122,9 @@ } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, "node_modules/@lit-labs/ssr-dom-shim": { @@ -511,6 +511,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.27.0.tgz", "integrity": "sha512-oCWWtjbyQ52AaUbzINLGBKScIPyqhps2Y7c8t6Gu6fcFeDxhKXMV1Cqvtj/OMhtAt53XjHfD2XruWwYv3cYYUA==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/base": "=14.0.0-canary.53b3cad2f.0", "@material/dom": "=14.0.0-canary.53b3cad2f.0", @@ -547,6 +548,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-circular-progress/-/mwc-circular-progress-0.27.0.tgz", "integrity": "sha512-7DkqMb5pUrHfLus5EZ7IT2HUMoE+uPpjGzu3MnDpIzDlfYo6I8p+ifWtEytI0NtXdY5UmITNuCv0RC77mhJrgQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/circular-progress": "=14.0.0-canary.53b3cad2f.0", "@material/mwc-base": "^0.27.0", @@ -576,6 +578,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.27.0.tgz", "integrity": "sha512-uLleloTxQ6dDShcZzqgqfC8otQY8DtGMO9HFQbAEncoFAWpAehcEonsuT/IUhMORN+c5un0P5WXwcZsInJb7og==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/floating-label": "=14.0.0-canary.53b3cad2f.0", "lit": "^2.0.0", @@ -586,6 +589,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.27.0.tgz", "integrity": "sha512-Sul44I37M9Ewynn0A9DjkEBrmll2VtNbth6Pxj7I1A/EAwEfaCrPvryyGqfIu1T2hTsRcaojzQx6QjF+B5QW9A==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "lit": "^2.0.0", "tslib": "^2.0.1" @@ -595,6 +599,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.27.0.tgz", "integrity": "sha512-wReiPa1UkLaCSPtpkAs1OGKEBtvqPnz9kzuY+RvN5ZQnpo3Uh7n3plHV4y/stsUBfrWtBCcOgYnCdNRaR/r2nQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/mwc-ripple": "^0.27.0", "lit": "^2.0.0", @@ -605,6 +610,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.27.0.tgz", "integrity": "sha512-n9Xpt5g3RJEl9rvk14OP6dUNJUtsJA46beTQiep7ppO7IPVFLC1v/5sPpUzfNPUBsclSPxdBuNlCxsgcIYueUw==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/line-ripple": "=14.0.0-canary.53b3cad2f.0", "lit": "^2.0.0", @@ -615,6 +621,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.27.0.tgz", "integrity": "sha512-IlqfQVaEd1RAHqhOG0Xk5JhTDgBe/P9og0pnACglK6bPE0vUhYKwibJiHcr4ACTPtGWHO9o92aktR+7AIEAKtQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/mwc-base": "^0.27.0", "@material/notched-outline": "=14.0.0-canary.53b3cad2f.0", @@ -626,6 +633,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.27.0.tgz", "integrity": "sha512-by0O8d8g3Rd96/sUB8hxy6MrDx1QTstqOsA64vqypWd526hMTBGRik08jTNap5sVIyrN9Vq17jb4NJLWQLnNHQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/dom": "=14.0.0-canary.53b3cad2f.0", "@material/mwc-base": "^0.27.0", @@ -703,6 +711,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.27.0.tgz", "integrity": "sha512-4/OEeEVAWWQ1DzpjeMLYLsa9HMlifOPjAvi0681Yj1g/RYJs5ONZS80HZ8HOT+efAOlZDugshgM4gdNS3I0XFQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", "dependencies": { "@material/floating-label": "=14.0.0-canary.53b3cad2f.0", "@material/line-ripple": "=14.0.0-canary.53b3cad2f.0", @@ -1170,9 +1179,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", - "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1208,9 +1217,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -1253,9 +1262,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1271,9 +1280,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.14", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", - "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "node_modules/@types/range-parser": { @@ -1308,14 +1317,14 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sockjs": { @@ -1856,9 +1865,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", "dev": true, "funding": [ { @@ -1946,18 +1955,6 @@ "node": ">=6" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -2105,16 +2102,16 @@ } }, "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" @@ -2368,9 +2365,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.716", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.716.tgz", - "integrity": "sha512-t/MXMzFKQC3UfMDpw7V5wdB/UAB8dWx4hEsy+fpPYJWW3gqh3u5T1uXp6vR+H6dGCPBxkRo+YBcapBLvbGQHRw==", + "version": "1.4.747", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz", + "integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==", "dev": true }, "node_modules/emojis-list": { @@ -2414,9 +2411,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -3295,9 +3292,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, "engines": { "node": ">= 10" @@ -3385,10 +3382,13 @@ } }, "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } @@ -3701,9 +3701,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", - "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", "dev": true, "dependencies": { "schema-utils": "^4.0.0", @@ -4128,9 +4128,9 @@ } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" @@ -4140,9 +4140,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -4157,9 +4157,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -4595,9 +4595,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -5052,8 +5052,7 @@ "node_modules/spicy-sections": { "version": "0.9.0", "resolved": "git+ssh://git@github.com/tabvengers/spicy-sections.git#c3aae99dbf1e627cdf03a35c913d7f6e970de22b", - "integrity": "sha512-JazCiIP9ZXxiBmWeECJLShYHSf3kVBe92UTKvSqh5cSN3dgbkBaUm3Hu/NNngt7mSnQ9JCuuAq5F6O1mlWk/Jw==", - "license": "W3C" + "integrity": "sha512-YyjgiaF9vhgpUL1NlXXrRljXJLeWs473YxVGoKWI/yAmimdqxFNrZ0eYqLHfsDjK1h0bzuyAVUkQZLuIg0UoUA==" }, "node_modules/statuses": { "version": "2.0.1", @@ -5147,9 +5146,9 @@ } }, "node_modules/terser": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", - "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz", + "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -5423,26 +5422,26 @@ } }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -5450,7 +5449,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -5470,9 +5469,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", @@ -5483,7 +5482,6 @@ "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", @@ -5585,9 +5583,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", @@ -5618,7 +5616,7 @@ "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", + "webpack-dev-middleware": "^5.3.4", "ws": "^8.13.0" }, "bin": { diff --git a/gcp/appengine/frontend3/package.json b/gcp/appengine/frontend3/package.json index 042b33b535b..6dc97a5b689 100644 --- a/gcp/appengine/frontend3/package.json +++ b/gcp/appengine/frontend3/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@github/clipboard-copy-element": "1.3.0", - "@github/relative-time-element": "4.3.1", + "@github/relative-time-element": "4.4.0", "@hotwired/turbo": "7.3.0", "@material/data-table": "13.0.0", "@material/layout-grid": "13.0.0", @@ -24,16 +24,16 @@ }, "devDependencies": { "copy-webpack-plugin": "10.2.4", - "css-loader": "6.10.0", + "css-loader": "6.11.0", "html-webpack-plugin": "5.6.0", - "mini-css-extract-plugin": "2.8.0", + "mini-css-extract-plugin": "2.9.0", "raw-loader": "4.0.2", - "sass": "1.71.1", + "sass": "1.75.0", "sass-loader": "12.6.0", "style-loader": "3.3.4", - "webpack": "5.90.3", - "webpack-bundle-analyzer": "4.10.1", + "webpack": "5.91.0", + "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "4.10.0", - "webpack-dev-server": "4.15.1" + "webpack-dev-server": "4.15.2" } } \ No newline at end of file