Skip to content

Error during SBoM ingestion: Validation failed: Licenses must be a valid json schema

Summary

This error began appearing at 2025-05-16 at 5:30 UTC and is causing 3% of SBoM ingestion jobs to fail.

https://log.gprd.gitlab.net/app/r/s/hBrH1

Backtrace:

activerecord (7.1.5.1) lib/active_record/validations.rb:84:in `raise_validation_error'
activemodel (7.1.5.1) lib/active_model/validations.rb:412:in `validate!'
app/models/concerns/bulk_insert_safe.rb:199:in `block in _bulk_insert_item_attributes'
app/models/concerns/bulk_insert_safe.rb:198:in `map'
app/models/concerns/bulk_insert_safe.rb:198:in `_bulk_insert_item_attributes'
app/models/concerns/bulk_insert_safe.rb:181:in `block (2 levels) in _bulk_insert_all!'
app/models/concerns/bulk_insert_safe.rb:180:in `each'
app/models/concerns/bulk_insert_safe.rb:180:in `each_slice'
app/models/concerns/bulk_insert_safe.rb:180:in `each'
app/models/concerns/bulk_insert_safe.rb:180:in `flat_map'
app/models/concerns/bulk_insert_safe.rb:180:in `block in _bulk_insert_all!'
app/models/concerns/cross_database_modification.rb:91:in `block in transaction'
activerecord (7.1.5.1) lib/active_record/connection_adapters/abstract/transaction.rb:535:in `block in within_new_transaction'
activesupport (7.1.5.1) lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
activerecord (7.1.5.1) lib/active_record/connection_adapters/abstract/transaction.rb:532:in `within_new_transaction'
activerecord (7.1.5.1) lib/active_record/connection_adapters/abstract/database_statements.rb:344:in `transaction'
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send'
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer'
lib/gitlab/database/load_balancing/load_balancer.rb:145:in `block in read_write'
lib/gitlab/database/load_balancing/load_balancer.rb:239:in `retry_with_backoff'
lib/gitlab/database/load_balancing/load_balancer.rb:135:in `read_write'
lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer'
lib/gitlab/database/load_balancing/connection_proxy.rb:78:in `transaction'
activerecord (7.1.5.1) lib/active_record/transactions.rb:212:in `transaction'
lib/gitlab/database.rb:397:in `transaction'
app/models/concerns/cross_database_modification.rb:82:in `transaction'
app/models/concerns/bulk_insert_safe.rb:179:in `_bulk_insert_all!'
app/models/concerns/bulk_insert_safe.rb:149:in `bulk_upsert!'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:96:in `bulk_upsert'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:84:in `block in return_data'
gems/gitlab-utils/lib/gitlab/utils/strong_memoize.rb:34:in `strong_memoize'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:82:in `return_data'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:72:in `execute'
ee/app/services/sbom/ingestion/tasks/base.rb:11:in `execute'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:25:in `block in execute'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:25:in `each'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:25:in `execute'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:16:in `execute'
ee/app/services/sbom/ingestion/ingest_report_service.rb:37:in `ingest_slice'
ee/app/services/sbom/ingestion/ingest_report_service.rb:20:in `block in execute'
ee/app/services/sbom/ingestion/occurrence_map_collection.rb:16:in `block in each'
ee/app/services/sbom/ingestion/occurrence_map_collection.rb:15:in `each'
ee/app/services/sbom/ingestion/occurrence_map_collection.rb:15:in `each'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `each_slice'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `each'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `map'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `execute'
ee/app/services/sbom/ingestion/ingest_report_service.rb:10:in `execute'
ee/app/services/sbom/ingestion/execution_strategy/default.rb:42:in `ingest_report'
ee/app/services/sbom/ingestion/execution_strategy/default.rb:33:in `block in ingest_reports'
ee/app/services/sbom/ingestion/execution_strategy/default.rb:32:in `each'
ee/app/services/sbom/ingestion/execution_strategy/default.rb:32:in `flat_map'
ee/app/services/sbom/ingestion/execution_strategy/default.rb:32:in `ingest_reports'
ee/app/services/sbom/ingestion/execution_strategy/default.rb:18:in `execute'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:28:in `block in execute'
lib/gitlab/exclusive_lease_helpers.rb:43:in `block in in_lock'
lib/gitlab/exclusive_lease_helpers.rb:53:in `with_instrumentation'
lib/gitlab/exclusive_lease_helpers.rb:42:in `in_lock'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:27:in `execute'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:19:in `execute'
ee/app/workers/sbom/ingest_reports_worker.rb:17:in `block in perform'
activesupport (7.1.5.1) lib/active_support/core_ext/object/try.rb:12:in `try'
ee/app/workers/sbom/ingest_reports_worker.rb:16:in `perform'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:220:in `execute_job'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:180:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
ee/lib/gitlab/sidekiq_middleware/set_session/server.rb:21:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/identity/restore.rb:12:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/resource_usage_limit/middleware.rb:16:in `perform'
lib/gitlab/sidekiq_middleware/resource_usage_limit/server.rb:8:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb:35:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/skip_jobs.rb:51:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/concurrency_limit/middleware.rb:37:in `perform'
lib/gitlab/sidekiq_middleware/concurrency_limit/server.rb:8:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/pause_control/strategies/base.rb:31:in `perform'
lib/gitlab/sidekiq_middleware/pause_control/strategy_handler.rb:22:in `perform'
lib/gitlab/sidekiq_middleware/pause_control/server.rb:8:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing.rb:16:in `perform'
lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb:44:in `perform'
lib/gitlab/sidekiq_middleware/duplicate_jobs/server.rb:8:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/click_house/migration_support/sidekiq_middleware.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/worker_context.rb:9:in `wrap_in_optional_context'
lib/gitlab/sidekiq_middleware/worker_context/server.rb:19:in `block in call'
lib/gitlab/application_context.rb:173:in `block in use'
gitlab-labkit (0.39.0) lib/labkit/context.rb:35:in `with_context'
lib/gitlab/application_context.rb:173:in `use'
lib/gitlab/application_context.rb:96:in `with_context'
lib/gitlab/sidekiq_middleware/worker_context/server.rb:17:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_status/server_middleware.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_versioning/middleware.rb:9:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `block in call'
lib/gitlab/database/query_analyzer.rb:83:in `within'
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/admin_mode/server.rb:14:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/set_ip_address.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/instrumentation_logger.rb:9:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/batch_loader.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/server_metrics.rb:111:in `block in call'
lib/gitlab/sidekiq_middleware/server_metrics.rb:139:in `block in instrument'
lib/gitlab/metrics/background_transaction.rb:33:in `run'
lib/gitlab/sidekiq_middleware/server_metrics.rb:139:in `instrument'
lib/gitlab/sidekiq_middleware/server_metrics.rb:110:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:8:in `block in call'
gems/gitlab-safe_request_store/lib/gitlab/safe_request_store.rb:66:in `enabling_request_store'
gems/gitlab-safe_request_store/lib/gitlab/safe_request_store.rb:59:in `ensure_request_store'
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:7:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
gitlab-labkit (0.39.0) lib/labkit/middleware/sidekiq/server.rb:21:in `block in call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:180:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
gitlab-labkit (0.39.0) lib/labkit/middleware/sidekiq/context/server.rb:16:in `block in call'
gitlab-labkit (0.39.0) lib/labkit/context.rb:35:in `with_context'
gitlab-labkit (0.39.0) lib/labkit/middleware/sidekiq/context/server.rb:15:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:173:in `invoke'
gitlab-labkit (0.39.0) lib/labkit/middleware/sidekiq/server.rb:20:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/monitor.rb:10:in `block in call'
lib/gitlab/sidekiq_daemon/monitor.rb:46:in `within_job'
lib/gitlab/sidekiq_middleware/monitor.rb:9:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/shard_awareness_validator.rb:10:in `block in call'
lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'
lib/gitlab/sidekiq_middleware/shard_awareness_validator.rb:9:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/size_limiter/server.rb:13:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
marginalia (1.11.1) lib/marginalia/sidekiq_instrumentation.rb:9:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sentry-sidekiq (5.23.0) lib/sentry/sidekiq/sentry_context_middleware.rb:54:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
vendor/gems/sidekiq/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
vendor/gems/sidekiq/lib/sidekiq/metrics/tracking.rb:26:in `track'
vendor/gems/sidekiq/lib/sidekiq/metrics/tracking.rb:134:in `call'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq/lib/sidekiq/middleware/chain.rb:173:in `invoke'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
vendor/gems/sidekiq/lib/sidekiq/job_retry.rb:118:in `local'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
vendor/gems/sidekiq/lib/sidekiq/rails.rb:27:in `block in call'
activesupport (7.1.5.1) lib/active_support/reloader.rb:77:in `block in wrap'
activesupport (7.1.5.1) lib/active_support/execution_wrapper.rb:92:in `wrap'
activesupport (7.1.5.1) lib/active_support/reloader.rb:74:in `wrap'
vendor/gems/sidekiq/lib/sidekiq/rails.rb:26:in `call'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:281:in `stats'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
lib/gitlab/sidekiq_logging/structured_logger.rb:21:in `call'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
vendor/gems/sidekiq/lib/sidekiq/job_retry.rb:85:in `global'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:132:in `block in dispatch'
vendor/gems/sidekiq/lib/sidekiq/job_logger.rb:40:in `prepare'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:131:in `dispatch'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:182:in `handle_interrupt'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:182:in `block in process'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:181:in `handle_interrupt'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:181:in `process'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:86:in `process_one'
vendor/gems/sidekiq/lib/sidekiq/processor.rb:76:in `run'
vendor/gems/sidekiq/lib/sidekiq/component.rb:10:in `watchdog'
vendor/gems/sidekiq/lib/sidekiq/component.rb:19:in `block in safe_thread'
Edited by 🤖 GitLab Bot 🤖