renovate 44.29.4 → 44.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/error-messages.d.ts +2 -1
- package/dist/constants/error-messages.js +2 -1
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/data/monorepo.js +1 -0
- package/dist/modules/datasource/terraform-provider/index.js +46 -1
- package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
- package/dist/modules/datasource/terraform-provider/schema.js +7 -2
- package/dist/modules/datasource/terraform-provider/schema.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +1 -1
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/hash.js +8 -0
- package/dist/modules/manager/terraform/lockfile/hash.js.map +1 -1
- package/dist/modules/platform/github/graphql.js +20 -1
- package/dist/modules/platform/github/graphql.js.map +1 -1
- package/dist/modules/platform/github/index.js +53 -5
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/github/pr.js +33 -1
- package/dist/modules/platform/github/pr.js.map +1 -1
- package/dist/modules/platform/github/scm.js +3 -2
- package/dist/modules/platform/github/scm.js.map +1 -1
- package/dist/workers/repository/update/branch/index.js +9 -0
- package/dist/workers/repository/update/branch/index.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -48,6 +48,7 @@ declare const EXTERNAL_HOST_ERROR = "external-host-error";
|
|
|
48
48
|
declare const IGNORABLE_HOST_ERROR = "ignorable-host-error";
|
|
49
49
|
declare const HOST_DISABLED = "host-disabled";
|
|
50
50
|
declare const WORKER_FILE_UPDATE_FAILED = "update-failure";
|
|
51
|
+
declare const PR_ALREADY_IN_MERGE_QUEUE = "pr-already-in-merge-queue";
|
|
51
52
|
declare const BUNDLER_INVALID_CREDENTIALS = "bundler-credentials";
|
|
52
53
|
declare const UNKNOWN_ERROR = "unknown-error";
|
|
53
54
|
declare const INVALID_PATH = "invalid-path";
|
|
@@ -56,5 +57,5 @@ declare const MISSING_API_CREDENTIALS = "missing-api-credentials";
|
|
|
56
57
|
/** Logger not initialized */
|
|
57
58
|
declare const LOGGER_NOT_INITIALIZED = "logger-not-initialized";
|
|
58
59
|
//#endregion
|
|
59
|
-
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, LOGGER_NOT_INITIALIZED, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
60
|
+
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, LOGGER_NOT_INITIALIZED, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PR_ALREADY_IN_MERGE_QUEUE, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
60
61
|
//# sourceMappingURL=error-messages.d.ts.map
|
|
@@ -87,6 +87,7 @@ const EXTERNAL_HOST_ERROR = "external-host-error";
|
|
|
87
87
|
const IGNORABLE_HOST_ERROR = "ignorable-host-error";
|
|
88
88
|
const HOST_DISABLED = "host-disabled";
|
|
89
89
|
const WORKER_FILE_UPDATE_FAILED = "update-failure";
|
|
90
|
+
const PR_ALREADY_IN_MERGE_QUEUE = "pr-already-in-merge-queue";
|
|
90
91
|
const BUNDLER_INVALID_CREDENTIALS = "bundler-credentials";
|
|
91
92
|
const UNKNOWN_ERROR = "unknown-error";
|
|
92
93
|
const INVALID_PATH = "invalid-path";
|
|
@@ -95,6 +96,6 @@ const MISSING_API_CREDENTIALS = "missing-api-credentials";
|
|
|
95
96
|
/** Logger not initialized */
|
|
96
97
|
const LOGGER_NOT_INITIALIZED = "logger-not-initialized";
|
|
97
98
|
//#endregion
|
|
98
|
-
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, LOGGER_NOT_INITIALIZED, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
99
|
+
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, LOGGER_NOT_INITIALIZED, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PR_ALREADY_IN_MERGE_QUEUE, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
99
100
|
|
|
100
101
|
//# sourceMappingURL=error-messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-messages.js","names":[],"sources":["../../lib/constants/error-messages.ts"],"sourcesContent":["// System error\nexport const SYSTEM_INSUFFICIENT_DISK_SPACE = 'disk-space';\nexport const SYSTEM_INSUFFICIENT_MEMORY = 'out-of-memory';\n\nexport const SystemErrors = [\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n SYSTEM_INSUFFICIENT_MEMORY,\n] as const;\n\n// Platform Error\nexport const PLATFORM_AUTHENTICATION_ERROR = 'authentication-error';\nexport const PLATFORM_BAD_CREDENTIALS = 'bad-credentials';\nexport const PLATFORM_GPG_FAILED = 'gpg-failed';\nexport const PLATFORM_INTEGRATION_UNAUTHORIZED = 'integration-unauthorized';\nexport const PLATFORM_NOT_FOUND = 'platform-not-found';\nexport const PLATFORM_RATE_LIMIT_EXCEEDED = 'rate-limit-exceeded';\nexport const PLATFORM_UNKNOWN_ERROR = 'platform-unknown-error';\n\nexport const PlatformErrors = [\n PLATFORM_AUTHENTICATION_ERROR,\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_GPG_FAILED,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_NOT_FOUND,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n PLATFORM_UNKNOWN_ERROR,\n] as const;\n\n// Config Error\nexport const CONFIG_VALIDATION = 'config-validation';\nexport const CONFIG_PRESETS_INVALID = 'config-presets-invalid';\nexport const CONFIG_SECRETS_EXPOSED = 'config-secrets-exposed';\nexport const CONFIG_SECRETS_INVALID = 'config-secrets-invalid';\nexport const CONFIG_VARIABLES_INVALID = 'config-variables-invalid';\nexport const CONFIG_GIT_URL_UNAVAILABLE = 'config-git-url-unavailable';\nexport const CONFIG_INHERIT_NOT_FOUND = 'config-inherit-not-found';\nexport const CONFIG_INHERIT_PARSE_ERROR = 'config-inherit-parse-error';\n\nexport const ConfigErrors = [\n CONFIG_VALIDATION,\n CONFIG_PRESETS_INVALID,\n CONFIG_SECRETS_EXPOSED,\n CONFIG_SECRETS_INVALID,\n CONFIG_VARIABLES_INVALID,\n CONFIG_GIT_URL_UNAVAILABLE,\n CONFIG_INHERIT_NOT_FOUND,\n CONFIG_INHERIT_PARSE_ERROR,\n] as const;\n\n// Repository Errors - causes repo to be considered as disabled\nexport const REPOSITORY_ACCESS_FORBIDDEN = 'forbidden';\nexport const REPOSITORY_ARCHIVED = 'archived';\nexport const REPOSITORY_BLOCKED = 'blocked';\nexport const REPOSITORY_CANNOT_FORK = 'cannot-fork';\nexport const REPOSITORY_DISABLED = 'disabled';\nexport const REPOSITORY_CLOSED_ONBOARDING = 'disabled-closed-onboarding';\nexport const REPOSITORY_DISABLED_BY_CONFIG = 'disabled-by-config';\nexport const REPOSITORY_NO_CONFIG = 'disabled-no-config';\nexport const REPOSITORY_EMPTY = 'empty';\nexport const REPOSITORY_FORK_MISSING = 'fork-missing';\nexport const REPOSITORY_FORK_MODE_FORKED = 'fork-mode-forked';\nexport const REPOSITORY_FORKED = 'fork';\nexport const REPOSITORY_MIRRORED = 'mirror';\nexport const REPOSITORY_NOT_FOUND = 'not-found';\nexport const REPOSITORY_NO_PACKAGE_FILES = 'no-package-files';\nexport const REPOSITORY_RENAMED = 'renamed';\nexport const REPOSITORY_UNINITIATED = 'uninitiated';\n\n/** cause repo to be considered as disabled */\nexport const RepositoryErrors = [\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CANNOT_FORK,\n REPOSITORY_DISABLED,\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_NO_CONFIG,\n REPOSITORY_EMPTY,\n REPOSITORY_FORK_MISSING,\n REPOSITORY_FORK_MODE_FORKED,\n REPOSITORY_FORKED,\n REPOSITORY_MIRRORED,\n REPOSITORY_NOT_FOUND,\n REPOSITORY_NO_PACKAGE_FILES,\n REPOSITORY_RENAMED,\n REPOSITORY_UNINITIATED,\n] as const;\n\n// Temporary Error\nexport const REPOSITORY_CHANGED = 'repository-changed';\nexport const TEMPORARY_ERROR = 'temporary-error';\nexport const NO_VULNERABILITY_ALERTS = 'no-vulnerability-alerts';\n\nexport const TemporaryErrors = [\n REPOSITORY_CHANGED,\n TEMPORARY_ERROR,\n NO_VULNERABILITY_ALERTS,\n] as const;\n\n// Manager Error\nexport const MANAGER_LOCKFILE_ERROR = 'lockfile-error';\nexport const FILE_ACCESS_VIOLATION_ERROR = 'file-access-violation-error';\n\n// Host error\nexport const EXTERNAL_HOST_ERROR = 'external-host-error';\nexport const IGNORABLE_HOST_ERROR = 'ignorable-host-error';\nexport const HOST_DISABLED = 'host-disabled';\n\n// Worker Error\nexport const WORKER_FILE_UPDATE_FAILED = 'update-failure';\n\n// Bundler Error\nexport const BUNDLER_INVALID_CREDENTIALS = 'bundler-credentials';\n\n// Unknown Error\nexport const UNKNOWN_ERROR = 'unknown-error';\n\n// PATH Error\nexport const INVALID_PATH = 'invalid-path';\n\n// PAGE NOT FOUND\nexport const PAGE_NOT_FOUND_ERROR = 'page-not-found';\n\n// Missing API required credentials\nexport const MISSING_API_CREDENTIALS = 'missing-api-credentials';\n\n/** Logger not initialized */\nexport const LOGGER_NOT_INITIALIZED = 'logger-not-initialized';\n"],"mappings":";AACA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,eAAe,CAC1B,gCACA,0BACF;AAGA,MAAa,gCAAgC;AAC7C,MAAa,2BAA2B;AACxC,MAAa,sBAAsB;AACnC,MAAa,oCAAoC;AACjD,MAAa,qBAAqB;AAClC,MAAa,+BAA+B;AAC5C,MAAa,yBAAyB;AAEtC,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,oBAAoB;AACjC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAC1C,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAE1C,MAAa,eAAe;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,8BAA8B;AAC3C,MAAa,sBAAsB;AACnC,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;AAC7C,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,0BAA0B;AACvC,MAAa,8BAA8B;AAC3C,MAAa,oBAAoB;AACjC,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,8BAA8B;AAC3C,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;;AAGtC,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,qBAAqB;AAClC,MAAa,kBAAkB;AAC/B,MAAa,0BAA0B;AAEvC,MAAa,kBAAkB;CAC7B;CACA;CACA;AACF;AAGA,MAAa,yBAAyB;AACtC,MAAa,8BAA8B;AAG3C,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,gBAAgB;AAG7B,MAAa,4BAA4B;AAGzC,MAAa,8BAA8B;AAG3C,MAAa,gBAAgB;AAG7B,MAAa,eAAe;AAG5B,MAAa,uBAAuB;AAGpC,MAAa,0BAA0B;;AAGvC,MAAa,yBAAyB"}
|
|
1
|
+
{"version":3,"file":"error-messages.js","names":[],"sources":["../../lib/constants/error-messages.ts"],"sourcesContent":["// System error\nexport const SYSTEM_INSUFFICIENT_DISK_SPACE = 'disk-space';\nexport const SYSTEM_INSUFFICIENT_MEMORY = 'out-of-memory';\n\nexport const SystemErrors = [\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n SYSTEM_INSUFFICIENT_MEMORY,\n] as const;\n\n// Platform Error\nexport const PLATFORM_AUTHENTICATION_ERROR = 'authentication-error';\nexport const PLATFORM_BAD_CREDENTIALS = 'bad-credentials';\nexport const PLATFORM_GPG_FAILED = 'gpg-failed';\nexport const PLATFORM_INTEGRATION_UNAUTHORIZED = 'integration-unauthorized';\nexport const PLATFORM_NOT_FOUND = 'platform-not-found';\nexport const PLATFORM_RATE_LIMIT_EXCEEDED = 'rate-limit-exceeded';\nexport const PLATFORM_UNKNOWN_ERROR = 'platform-unknown-error';\n\nexport const PlatformErrors = [\n PLATFORM_AUTHENTICATION_ERROR,\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_GPG_FAILED,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_NOT_FOUND,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n PLATFORM_UNKNOWN_ERROR,\n] as const;\n\n// Config Error\nexport const CONFIG_VALIDATION = 'config-validation';\nexport const CONFIG_PRESETS_INVALID = 'config-presets-invalid';\nexport const CONFIG_SECRETS_EXPOSED = 'config-secrets-exposed';\nexport const CONFIG_SECRETS_INVALID = 'config-secrets-invalid';\nexport const CONFIG_VARIABLES_INVALID = 'config-variables-invalid';\nexport const CONFIG_GIT_URL_UNAVAILABLE = 'config-git-url-unavailable';\nexport const CONFIG_INHERIT_NOT_FOUND = 'config-inherit-not-found';\nexport const CONFIG_INHERIT_PARSE_ERROR = 'config-inherit-parse-error';\n\nexport const ConfigErrors = [\n CONFIG_VALIDATION,\n CONFIG_PRESETS_INVALID,\n CONFIG_SECRETS_EXPOSED,\n CONFIG_SECRETS_INVALID,\n CONFIG_VARIABLES_INVALID,\n CONFIG_GIT_URL_UNAVAILABLE,\n CONFIG_INHERIT_NOT_FOUND,\n CONFIG_INHERIT_PARSE_ERROR,\n] as const;\n\n// Repository Errors - causes repo to be considered as disabled\nexport const REPOSITORY_ACCESS_FORBIDDEN = 'forbidden';\nexport const REPOSITORY_ARCHIVED = 'archived';\nexport const REPOSITORY_BLOCKED = 'blocked';\nexport const REPOSITORY_CANNOT_FORK = 'cannot-fork';\nexport const REPOSITORY_DISABLED = 'disabled';\nexport const REPOSITORY_CLOSED_ONBOARDING = 'disabled-closed-onboarding';\nexport const REPOSITORY_DISABLED_BY_CONFIG = 'disabled-by-config';\nexport const REPOSITORY_NO_CONFIG = 'disabled-no-config';\nexport const REPOSITORY_EMPTY = 'empty';\nexport const REPOSITORY_FORK_MISSING = 'fork-missing';\nexport const REPOSITORY_FORK_MODE_FORKED = 'fork-mode-forked';\nexport const REPOSITORY_FORKED = 'fork';\nexport const REPOSITORY_MIRRORED = 'mirror';\nexport const REPOSITORY_NOT_FOUND = 'not-found';\nexport const REPOSITORY_NO_PACKAGE_FILES = 'no-package-files';\nexport const REPOSITORY_RENAMED = 'renamed';\nexport const REPOSITORY_UNINITIATED = 'uninitiated';\n\n/** cause repo to be considered as disabled */\nexport const RepositoryErrors = [\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CANNOT_FORK,\n REPOSITORY_DISABLED,\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_NO_CONFIG,\n REPOSITORY_EMPTY,\n REPOSITORY_FORK_MISSING,\n REPOSITORY_FORK_MODE_FORKED,\n REPOSITORY_FORKED,\n REPOSITORY_MIRRORED,\n REPOSITORY_NOT_FOUND,\n REPOSITORY_NO_PACKAGE_FILES,\n REPOSITORY_RENAMED,\n REPOSITORY_UNINITIATED,\n] as const;\n\n// Temporary Error\nexport const REPOSITORY_CHANGED = 'repository-changed';\nexport const TEMPORARY_ERROR = 'temporary-error';\nexport const NO_VULNERABILITY_ALERTS = 'no-vulnerability-alerts';\n\nexport const TemporaryErrors = [\n REPOSITORY_CHANGED,\n TEMPORARY_ERROR,\n NO_VULNERABILITY_ALERTS,\n] as const;\n\n// Manager Error\nexport const MANAGER_LOCKFILE_ERROR = 'lockfile-error';\nexport const FILE_ACCESS_VIOLATION_ERROR = 'file-access-violation-error';\n\n// Host error\nexport const EXTERNAL_HOST_ERROR = 'external-host-error';\nexport const IGNORABLE_HOST_ERROR = 'ignorable-host-error';\nexport const HOST_DISABLED = 'host-disabled';\n\n// Worker Error\nexport const WORKER_FILE_UPDATE_FAILED = 'update-failure';\n\n// PR Error\nexport const PR_ALREADY_IN_MERGE_QUEUE = 'pr-already-in-merge-queue';\n\n// Bundler Error\nexport const BUNDLER_INVALID_CREDENTIALS = 'bundler-credentials';\n\n// Unknown Error\nexport const UNKNOWN_ERROR = 'unknown-error';\n\n// PATH Error\nexport const INVALID_PATH = 'invalid-path';\n\n// PAGE NOT FOUND\nexport const PAGE_NOT_FOUND_ERROR = 'page-not-found';\n\n// Missing API required credentials\nexport const MISSING_API_CREDENTIALS = 'missing-api-credentials';\n\n/** Logger not initialized */\nexport const LOGGER_NOT_INITIALIZED = 'logger-not-initialized';\n"],"mappings":";AACA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,eAAe,CAC1B,gCACA,0BACF;AAGA,MAAa,gCAAgC;AAC7C,MAAa,2BAA2B;AACxC,MAAa,sBAAsB;AACnC,MAAa,oCAAoC;AACjD,MAAa,qBAAqB;AAClC,MAAa,+BAA+B;AAC5C,MAAa,yBAAyB;AAEtC,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,oBAAoB;AACjC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAC1C,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAE1C,MAAa,eAAe;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,8BAA8B;AAC3C,MAAa,sBAAsB;AACnC,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;AAC7C,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,0BAA0B;AACvC,MAAa,8BAA8B;AAC3C,MAAa,oBAAoB;AACjC,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,8BAA8B;AAC3C,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;;AAGtC,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,qBAAqB;AAClC,MAAa,kBAAkB;AAC/B,MAAa,0BAA0B;AAEvC,MAAa,kBAAkB;CAC7B;CACA;CACA;AACF;AAGA,MAAa,yBAAyB;AACtC,MAAa,8BAA8B;AAG3C,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,gBAAgB;AAG7B,MAAa,4BAA4B;AAGzC,MAAa,4BAA4B;AAGzC,MAAa,8BAA8B;AAG3C,MAAa,gBAAgB;AAG7B,MAAa,eAAe;AAG5B,MAAa,uBAAuB;AAGpC,MAAa,0BAA0B;;AAGvC,MAAa,yBAAyB"}
|
package/dist/data/monorepo.js
CHANGED
|
@@ -451,6 +451,7 @@ var repoGroups = {
|
|
|
451
451
|
"jetty": "https://github.com/jetty/jetty.project",
|
|
452
452
|
"jna": "https://github.com/java-native-access/jna",
|
|
453
453
|
"json-smart-v2": "https://github.com/netplex/json-smart-v2",
|
|
454
|
+
"jsonforms": "https://github.com/eclipsesource/jsonforms",
|
|
454
455
|
"jsplumb": "https://github.com/jsplumb/jsplumb",
|
|
455
456
|
"junior": "https://github.com/getsentry/junior",
|
|
456
457
|
"junit-framework": ["https://github.com/junit-team/junit5", "https://github.com/junit-team/junit-framework"],
|
|
@@ -4,10 +4,12 @@ import { getQueryString, joinUrlParts } from "../../../util/url.js";
|
|
|
4
4
|
import { ExternalHostError } from "../../../types/errors/external-host-error.js";
|
|
5
5
|
import { id } from "../../versioning/hashicorp/index.js";
|
|
6
6
|
import { withCache } from "../../../util/cache/package/with-cache.js";
|
|
7
|
+
import { RequestError } from "../../../util/http/got.js";
|
|
8
|
+
import "../../../util/http/index.js";
|
|
7
9
|
import { map } from "../../../util/promises.js";
|
|
8
10
|
import { TerraformDatasource } from "../terraform-module/base.js";
|
|
9
11
|
import { createSDBackendURL } from "../terraform-module/utils.js";
|
|
10
|
-
import { OpenTofuProviderDocsResponse, TerraformProviderReleaseBackend, TerraformProviderV2Response, TerraformProviderVersions, TerraformRegistryBuildResponse, TerraformRegistryVersions, VersionDetailResponse } from "./schema.js";
|
|
12
|
+
import { OpenTofuProviderDocsResponse, OpenTofuProviderPackagesResponse, TerraformProviderReleaseBackend, TerraformProviderV2Response, TerraformProviderVersions, TerraformRegistryBuildResponse, TerraformRegistryVersions, VersionDetailResponse } from "./schema.js";
|
|
11
13
|
//#region lib/modules/datasource/terraform-provider/index.ts
|
|
12
14
|
var TerraformProviderDatasource = class TerraformProviderDatasource extends TerraformDatasource {
|
|
13
15
|
static id = "terraform-provider";
|
|
@@ -147,6 +149,49 @@ var TerraformProviderDatasource = class TerraformProviderDatasource extends Terr
|
|
|
147
149
|
key: `getBuilds:${registryURL}/${repository}/${version}`
|
|
148
150
|
}, () => this._getBuilds(registryURL, repository, version));
|
|
149
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* A single platform's download endpoint returns the hashes for all platforms,
|
|
154
|
+
* so we query `linux/amd64` and fall back to `/versions` discovery only when a
|
|
155
|
+
* provider lacks that platform (404).
|
|
156
|
+
* See https://github.com/opentofu/opentofu/pull/3434
|
|
157
|
+
*/
|
|
158
|
+
async _getProviderPackages(repository, version) {
|
|
159
|
+
const baseUrl = joinUrlParts(TerraformProviderDatasource.openTofuRegistryUrl, "v1/providers", repository);
|
|
160
|
+
try {
|
|
161
|
+
try {
|
|
162
|
+
const { body } = await this.http.getJson(`${baseUrl}/${version}/download/linux/amd64`, OpenTofuProviderPackagesResponse);
|
|
163
|
+
return body;
|
|
164
|
+
} catch (err) {
|
|
165
|
+
if (!(err instanceof RequestError) || err.response?.statusCode !== 404) throw err;
|
|
166
|
+
}
|
|
167
|
+
return await this._getProviderPackagesForAvailablePlatform(baseUrl, version);
|
|
168
|
+
} catch (err) {
|
|
169
|
+
if (err instanceof ExternalHostError) throw err;
|
|
170
|
+
logger.debug({
|
|
171
|
+
err,
|
|
172
|
+
repository,
|
|
173
|
+
version
|
|
174
|
+
}, `Failed to retrieve provider packages for ${repository}@${version}`);
|
|
175
|
+
throw new ExternalHostError(err);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Some providers do not publish a `linux/amd64` build, so discover an
|
|
180
|
+
* available platform via `/versions` and fetch its download endpoint.
|
|
181
|
+
*/
|
|
182
|
+
async _getProviderPackagesForAvailablePlatform(baseUrl, version) {
|
|
183
|
+
const { body: versionsResponse } = await this.http.getJson(`${baseUrl}/versions`, TerraformRegistryVersions);
|
|
184
|
+
const platform = versionsResponse.versions?.find((entry) => entry.version === version)?.platforms?.[0];
|
|
185
|
+
if (!platform) return null;
|
|
186
|
+
const { body: hashes } = await this.http.getJson(`${baseUrl}/${version}/download/${platform.os}/${platform.arch}`, OpenTofuProviderPackagesResponse);
|
|
187
|
+
return hashes;
|
|
188
|
+
}
|
|
189
|
+
getProviderPackages(repository, version) {
|
|
190
|
+
return withCache({
|
|
191
|
+
namespace: `datasource-${TerraformProviderDatasource.id}`,
|
|
192
|
+
key: `getProviderPackages:${repository}/${version}`
|
|
193
|
+
}, () => this._getProviderPackages(repository, version));
|
|
194
|
+
}
|
|
150
195
|
async _getZipHashes(zipHashUrl) {
|
|
151
196
|
let rawHashData;
|
|
152
197
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["hashicorpVersioning.id","p.map"],"sources":["../../../../lib/modules/datasource/terraform-provider/index.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport * as p from '../../../util/promises.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { getQueryString, joinUrlParts } from '../../../util/url.ts';\nimport * as hashicorpVersioning from '../../versioning/hashicorp/index.ts';\nimport { TerraformDatasource } from '../terraform-module/base.ts';\nimport { createSDBackendURL } from '../terraform-module/utils.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport {\n OpenTofuProviderDocsResponse,\n type TerraformBuild,\n TerraformProviderReleaseBackend,\n TerraformProviderV2Response,\n TerraformProviderVersions,\n TerraformRegistryBuildResponse,\n TerraformRegistryVersions,\n VersionDetailResponse,\n} from './schema.ts';\n\nexport class TerraformProviderDatasource extends TerraformDatasource {\n static override readonly id = 'terraform-provider';\n\n static readonly hashicorpReleaseUrl = 'https://releases.hashicorp.com';\n\n static readonly defaultRegistryUrls = [\n TerraformProviderDatasource.terraformRegistryUrl,\n TerraformProviderDatasource.hashicorpReleaseUrl,\n ];\n\n static repositoryRegex = regEx(/^hashicorp\\/(?<packageName>\\S+)$/);\n\n constructor() {\n super(TerraformProviderDatasource.id);\n }\n\n override readonly defaultRegistryUrls =\n TerraformProviderDatasource.defaultRegistryUrls;\n\n override readonly defaultVersioning = hashicorpVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is only available for `registry.terraform.io` (v2 API) and `registry.opentofu.org` (via `api.opentofu.org`). Other registries using the Provider Registry Protocol do not provide timestamps.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'For `registry.terraform.io`, the source URL is taken from the `source` field of the v2 API response. For `registry.opentofu.org`, it is derived from the package name following the OpenTofu registry policy of `github.com/NAMESPACE/terraform-provider-NAME`.';\n\n private async _getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n logger.trace(\n `terraform-provider.getDependencies() packageName: ${packageName}`,\n );\n\n if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) {\n return await this.queryTerraformRegistryV2(registryUrl, packageName);\n }\n if (\n registryUrl === TerraformProviderDatasource.openTofuRegistryUrl ||\n registryUrl === TerraformProviderDatasource.openTofuApiUrl\n ) {\n return await this.queryOpenTofuRegistry(packageName);\n }\n if (registryUrl === TerraformProviderDatasource.hashicorpReleaseUrl) {\n return await this.queryReleaseBackend(packageName, registryUrl);\n }\n\n // Fall back to the standard Provider Registry Protocol for other registries.\n return await this.queryProviderRegistry(registryUrl, packageName);\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const url = config.registryUrl;\n const repo = TerraformProviderDatasource.getRepository(config);\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleases:${url}/${repo}`,\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n\n private static getRepository({ packageName }: GetReleasesConfig): string {\n return packageName.includes('/') ? packageName : `hashicorp/${packageName}`;\n }\n\n /**\n * Query the Terraform Registry using the undocumented v2 JSON:API.\n *\n * Returns release timestamps for all versions, unlike the v1 API\n * which only exposed the timestamp for the latest version.\n */\n private async queryTerraformRegistryV2(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const providerUrl = `${joinUrlParts(\n registryUrl,\n 'v2/providers',\n repository,\n )}?${getQueryString({ include: 'provider-versions' })}`;\n const { body: res } = await this.http.getJson(\n providerUrl,\n TerraformProviderV2Response,\n );\n res.homepage = `${registryUrl}/providers/${repository}`;\n return res;\n }\n\n /**\n * Query the OpenTofu registry docs API.\n * https://api.opentofu.org/\n *\n * Used when the registry URL is `registry.opentofu.org`.\n * Queries `api.opentofu.org` for provider versions with release timestamps.\n */\n private async queryOpenTofuRegistry(\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const docsUrl = joinUrlParts(\n TerraformProviderDatasource.openTofuApiUrl,\n 'registry/docs/providers',\n repository,\n 'index.json',\n );\n const { body: res } = await this.http.getJson(\n docsUrl,\n OpenTofuProviderDocsResponse,\n );\n res.homepage = `https://search.opentofu.org/provider/${repository}`;\n\n // The OpenTofu registry only indexes providers hosted on GitHub under the\n // `NAMESPACE/terraform-provider-NAME` repository naming convention, so the\n // source URL can be derived deterministically from the package name.\n // https://github.com/opentofu/registry/blob/main/PROCEDURES.md\n const [namespace, name] = repository.split('/');\n res.sourceUrl = `https://github.com/${namespace}/terraform-provider-${name}`;\n\n return res;\n }\n\n /**\n * Query a registry using the Provider Registry Protocol that all registries\n * are required to implement.\n * https://www.terraform.io/internals/provider-registry-protocol\n */\n private async queryProviderRegistry(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryUrl);\n const backendURL = createSDBackendURL(\n registryUrl,\n 'providers.v1',\n serviceDiscovery,\n `${repository}/versions`,\n );\n const res = (await this.http.getJson(backendURL, TerraformProviderVersions))\n .body;\n const dep: ReleaseResult = {\n releases: res.versions.map(({ version }) => ({\n version,\n })),\n };\n return dep;\n }\n\n private async queryReleaseBackend(\n packageName: string,\n registryURL: string,\n ): Promise<ReleaseResult | null> {\n const hashicorpPackage = packageName.replace('hashicorp/', '');\n const backendLookUpName = `terraform-provider-${hashicorpPackage}`;\n const backendURL = joinUrlParts(\n registryURL,\n backendLookUpName,\n `index.json`,\n );\n const res = (\n await this.http.getJson(backendURL, TerraformProviderReleaseBackend)\n ).body;\n\n const dep: ReleaseResult = {\n releases: Object.keys(res.versions).map((version) => ({\n version,\n })),\n sourceUrl: joinUrlParts(\n 'https://github.com/terraform-providers',\n backendLookUpName,\n ),\n };\n return dep;\n }\n\n private async _getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n if (registryURL === TerraformProviderDatasource.hashicorpReleaseUrl) {\n // check if registryURL === secondary backend\n const repositoryRegexResult =\n TerraformProviderDatasource.repositoryRegex.exec(repository)?.groups;\n if (!repositoryRegexResult) {\n // non hashicorp builds are not supported with releases.hashicorp.com\n return null;\n }\n const packageName = repositoryRegexResult.packageName;\n const backendLookUpName = `terraform-provider-${packageName}`;\n let versionReleaseBackend: VersionDetailResponse;\n try {\n versionReleaseBackend = await this.getReleaseBackendIndex(\n backendLookUpName,\n version,\n );\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, backendLookUpName, version },\n `Failed to retrieve builds for ${backendLookUpName} ${version}`,\n );\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n return versionReleaseBackend.builds;\n }\n\n // check public or private Terraform registry\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryURL);\n if (!serviceDiscovery) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Service discovery not found for ${registryURL}`),\n );\n }\n const backendURL = createSDBackendURL(\n registryURL,\n 'providers.v1',\n serviceDiscovery,\n repository,\n );\n const versionsResponse = (\n await this.http.getJson(\n `${backendURL}/versions`,\n TerraformRegistryVersions,\n )\n ).body;\n if (!versionsResponse.versions) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Failed to retrieve version list for ${backendURL}`),\n );\n }\n const builds = versionsResponse.versions.find(\n (value) => value.version === version,\n );\n if (!builds) {\n // should never happen, but just in case\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(\n `No builds found for ${repository}:${version} on ${registryURL}`,\n ),\n );\n }\n const result = await p.map(\n builds.platforms,\n async (platform) => {\n const buildURL = `${backendURL}/${version}/download/${platform.os}/${platform.arch}`;\n try {\n const res = (\n await this.http.getJson(buildURL, TerraformRegistryBuildResponse)\n ).body;\n const newBuild: TerraformBuild = {\n name: repository,\n url: res.download_url,\n version,\n ...res,\n };\n return newBuild;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug({ err, url: buildURL }, 'Failed to retrieve build');\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n },\n { concurrency: 4 },\n );\n\n return result;\n }\n\n getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getBuilds:${registryURL}/${repository}/${version}`,\n },\n () => this._getBuilds(registryURL, repository, version),\n );\n }\n\n private async _getZipHashes(\n zipHashUrl: string,\n ): Promise<string[] | undefined> {\n // The hashes are formatted as the result of sha256sum in plain text, each line: <hash>\\t<filename>\n let rawHashData: string;\n try {\n rawHashData = (await this.http.getText(zipHashUrl)).body;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, zipHashUrl },\n `Failed to retrieve zip hashes from ${zipHashUrl}`,\n );\n return undefined;\n }\n\n return rawHashData\n .trimEnd()\n .split('\\n')\n .map((line) => line.split(/\\s/)[0]);\n }\n\n getZipHashes(zipHashUrl: string): Promise<string[] | undefined> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getZipHashes:${zipHashUrl}`,\n },\n () => this._getZipHashes(zipHashUrl),\n );\n }\n\n private async _getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return (\n await this.http.getJson(\n `${TerraformProviderDatasource.hashicorpReleaseUrl}/${backendLookUpName}/${version}/index.json`,\n VersionDetailResponse,\n )\n ).body;\n }\n\n getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleaseBackendIndex:${backendLookUpName}/${version}`,\n },\n () => this._getReleaseBackendIndex(backendLookUpName, version),\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["hashicorpVersioning.id","p.map","HttpError"],"sources":["../../../../lib/modules/datasource/terraform-provider/index.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { HttpError } from '../../../util/http/index.ts';\nimport * as p from '../../../util/promises.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { getQueryString, joinUrlParts } from '../../../util/url.ts';\nimport * as hashicorpVersioning from '../../versioning/hashicorp/index.ts';\nimport { TerraformDatasource } from '../terraform-module/base.ts';\nimport { createSDBackendURL } from '../terraform-module/utils.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport {\n OpenTofuProviderDocsResponse,\n OpenTofuProviderPackagesResponse,\n type TerraformBuild,\n TerraformProviderReleaseBackend,\n TerraformProviderV2Response,\n TerraformProviderVersions,\n TerraformRegistryBuildResponse,\n TerraformRegistryVersions,\n VersionDetailResponse,\n} from './schema.ts';\n\nexport class TerraformProviderDatasource extends TerraformDatasource {\n static override readonly id = 'terraform-provider';\n\n static readonly hashicorpReleaseUrl = 'https://releases.hashicorp.com';\n\n static readonly defaultRegistryUrls = [\n TerraformProviderDatasource.terraformRegistryUrl,\n TerraformProviderDatasource.hashicorpReleaseUrl,\n ];\n\n static repositoryRegex = regEx(/^hashicorp\\/(?<packageName>\\S+)$/);\n\n constructor() {\n super(TerraformProviderDatasource.id);\n }\n\n override readonly defaultRegistryUrls =\n TerraformProviderDatasource.defaultRegistryUrls;\n\n override readonly defaultVersioning = hashicorpVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is only available for `registry.terraform.io` (v2 API) and `registry.opentofu.org` (via `api.opentofu.org`). Other registries using the Provider Registry Protocol do not provide timestamps.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'For `registry.terraform.io`, the source URL is taken from the `source` field of the v2 API response. For `registry.opentofu.org`, it is derived from the package name following the OpenTofu registry policy of `github.com/NAMESPACE/terraform-provider-NAME`.';\n\n private async _getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n logger.trace(\n `terraform-provider.getDependencies() packageName: ${packageName}`,\n );\n\n if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) {\n return await this.queryTerraformRegistryV2(registryUrl, packageName);\n }\n if (\n registryUrl === TerraformProviderDatasource.openTofuRegistryUrl ||\n registryUrl === TerraformProviderDatasource.openTofuApiUrl\n ) {\n return await this.queryOpenTofuRegistry(packageName);\n }\n if (registryUrl === TerraformProviderDatasource.hashicorpReleaseUrl) {\n return await this.queryReleaseBackend(packageName, registryUrl);\n }\n\n // Fall back to the standard Provider Registry Protocol for other registries.\n return await this.queryProviderRegistry(registryUrl, packageName);\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const url = config.registryUrl;\n const repo = TerraformProviderDatasource.getRepository(config);\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleases:${url}/${repo}`,\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n\n private static getRepository({ packageName }: GetReleasesConfig): string {\n return packageName.includes('/') ? packageName : `hashicorp/${packageName}`;\n }\n\n /**\n * Query the Terraform Registry using the undocumented v2 JSON:API.\n *\n * Returns release timestamps for all versions, unlike the v1 API\n * which only exposed the timestamp for the latest version.\n */\n private async queryTerraformRegistryV2(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const providerUrl = `${joinUrlParts(\n registryUrl,\n 'v2/providers',\n repository,\n )}?${getQueryString({ include: 'provider-versions' })}`;\n const { body: res } = await this.http.getJson(\n providerUrl,\n TerraformProviderV2Response,\n );\n res.homepage = `${registryUrl}/providers/${repository}`;\n return res;\n }\n\n /**\n * Query the OpenTofu registry docs API.\n * https://api.opentofu.org/\n *\n * Used when the registry URL is `registry.opentofu.org`.\n * Queries `api.opentofu.org` for provider versions with release timestamps.\n */\n private async queryOpenTofuRegistry(\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const docsUrl = joinUrlParts(\n TerraformProviderDatasource.openTofuApiUrl,\n 'registry/docs/providers',\n repository,\n 'index.json',\n );\n const { body: res } = await this.http.getJson(\n docsUrl,\n OpenTofuProviderDocsResponse,\n );\n res.homepage = `https://search.opentofu.org/provider/${repository}`;\n\n // The OpenTofu registry only indexes providers hosted on GitHub under the\n // `NAMESPACE/terraform-provider-NAME` repository naming convention, so the\n // source URL can be derived deterministically from the package name.\n // https://github.com/opentofu/registry/blob/main/PROCEDURES.md\n const [namespace, name] = repository.split('/');\n res.sourceUrl = `https://github.com/${namespace}/terraform-provider-${name}`;\n\n return res;\n }\n\n /**\n * Query a registry using the Provider Registry Protocol that all registries\n * are required to implement.\n * https://www.terraform.io/internals/provider-registry-protocol\n */\n private async queryProviderRegistry(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult> {\n const repository = TerraformProviderDatasource.getRepository({\n packageName,\n });\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryUrl);\n const backendURL = createSDBackendURL(\n registryUrl,\n 'providers.v1',\n serviceDiscovery,\n `${repository}/versions`,\n );\n const res = (await this.http.getJson(backendURL, TerraformProviderVersions))\n .body;\n const dep: ReleaseResult = {\n releases: res.versions.map(({ version }) => ({\n version,\n })),\n };\n return dep;\n }\n\n private async queryReleaseBackend(\n packageName: string,\n registryURL: string,\n ): Promise<ReleaseResult | null> {\n const hashicorpPackage = packageName.replace('hashicorp/', '');\n const backendLookUpName = `terraform-provider-${hashicorpPackage}`;\n const backendURL = joinUrlParts(\n registryURL,\n backendLookUpName,\n `index.json`,\n );\n const res = (\n await this.http.getJson(backendURL, TerraformProviderReleaseBackend)\n ).body;\n\n const dep: ReleaseResult = {\n releases: Object.keys(res.versions).map((version) => ({\n version,\n })),\n sourceUrl: joinUrlParts(\n 'https://github.com/terraform-providers',\n backendLookUpName,\n ),\n };\n return dep;\n }\n\n private async _getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n if (registryURL === TerraformProviderDatasource.hashicorpReleaseUrl) {\n // check if registryURL === secondary backend\n const repositoryRegexResult =\n TerraformProviderDatasource.repositoryRegex.exec(repository)?.groups;\n if (!repositoryRegexResult) {\n // non hashicorp builds are not supported with releases.hashicorp.com\n return null;\n }\n const packageName = repositoryRegexResult.packageName;\n const backendLookUpName = `terraform-provider-${packageName}`;\n let versionReleaseBackend: VersionDetailResponse;\n try {\n versionReleaseBackend = await this.getReleaseBackendIndex(\n backendLookUpName,\n version,\n );\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, backendLookUpName, version },\n `Failed to retrieve builds for ${backendLookUpName} ${version}`,\n );\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n return versionReleaseBackend.builds;\n }\n\n // check public or private Terraform registry\n const serviceDiscovery =\n await this.getTerraformServiceDiscoveryResult(registryURL);\n if (!serviceDiscovery) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Service discovery not found for ${registryURL}`),\n );\n }\n const backendURL = createSDBackendURL(\n registryURL,\n 'providers.v1',\n serviceDiscovery,\n repository,\n );\n const versionsResponse = (\n await this.http.getJson(\n `${backendURL}/versions`,\n TerraformRegistryVersions,\n )\n ).body;\n if (!versionsResponse.versions) {\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(`Failed to retrieve version list for ${backendURL}`),\n );\n }\n const builds = versionsResponse.versions.find(\n (value) => value.version === version,\n );\n if (!builds) {\n // should never happen, but just in case\n // throw an error to disable caching\n throw new ExternalHostError(\n new Error(\n `No builds found for ${repository}:${version} on ${registryURL}`,\n ),\n );\n }\n const result = await p.map(\n builds.platforms,\n async (platform) => {\n const buildURL = `${backendURL}/${version}/download/${platform.os}/${platform.arch}`;\n try {\n const res = (\n await this.http.getJson(buildURL, TerraformRegistryBuildResponse)\n ).body;\n const newBuild: TerraformBuild = {\n name: repository,\n url: res.download_url,\n version,\n ...res,\n };\n return newBuild;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug({ err, url: buildURL }, 'Failed to retrieve build');\n // throw an error to disable caching\n throw new ExternalHostError(err);\n }\n },\n { concurrency: 4 },\n );\n\n return result;\n }\n\n getBuilds(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<TerraformBuild[] | null> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getBuilds:${registryURL}/${repository}/${version}`,\n },\n () => this._getBuilds(registryURL, repository, version),\n );\n }\n\n /**\n * A single platform's download endpoint returns the hashes for all platforms,\n * so we query `linux/amd64` and fall back to `/versions` discovery only when a\n * provider lacks that platform (404).\n * See https://github.com/opentofu/opentofu/pull/3434\n */\n private async _getProviderPackages(\n repository: string,\n version: string,\n ): Promise<string[] | null> {\n const baseUrl = joinUrlParts(\n TerraformProviderDatasource.openTofuRegistryUrl,\n 'v1/providers',\n repository,\n );\n\n try {\n try {\n const { body } = await this.http.getJson(\n `${baseUrl}/${version}/download/linux/amd64`,\n OpenTofuProviderPackagesResponse,\n );\n return body;\n } catch (err) {\n if (!(err instanceof HttpError) || err.response?.statusCode !== 404) {\n throw err;\n }\n }\n return await this._getProviderPackagesForAvailablePlatform(\n baseUrl,\n version,\n );\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, repository, version },\n `Failed to retrieve provider packages for ${repository}@${version}`,\n );\n throw new ExternalHostError(err);\n }\n }\n\n /**\n * Some providers do not publish a `linux/amd64` build, so discover an\n * available platform via `/versions` and fetch its download endpoint.\n */\n private async _getProviderPackagesForAvailablePlatform(\n baseUrl: string,\n version: string,\n ): Promise<string[] | null> {\n const { body: versionsResponse } = await this.http.getJson(\n `${baseUrl}/versions`,\n TerraformRegistryVersions,\n );\n const platform = versionsResponse.versions?.find(\n (entry) => entry.version === version,\n )?.platforms?.[0];\n if (!platform) {\n return null;\n }\n const { body: hashes } = await this.http.getJson(\n `${baseUrl}/${version}/download/${platform.os}/${platform.arch}`,\n OpenTofuProviderPackagesResponse,\n );\n return hashes;\n }\n\n getProviderPackages(\n repository: string,\n version: string,\n ): Promise<string[] | null> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getProviderPackages:${repository}/${version}`,\n },\n () => this._getProviderPackages(repository, version),\n );\n }\n\n private async _getZipHashes(\n zipHashUrl: string,\n ): Promise<string[] | undefined> {\n // The hashes are formatted as the result of sha256sum in plain text, each line: <hash>\\t<filename>\n let rawHashData: string;\n try {\n rawHashData = (await this.http.getText(zipHashUrl)).body;\n } catch (err) {\n /* v8 ignore next 3 -- hard to test */\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, zipHashUrl },\n `Failed to retrieve zip hashes from ${zipHashUrl}`,\n );\n return undefined;\n }\n\n return rawHashData\n .trimEnd()\n .split('\\n')\n .map((line) => line.split(/\\s/)[0]);\n }\n\n getZipHashes(zipHashUrl: string): Promise<string[] | undefined> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getZipHashes:${zipHashUrl}`,\n },\n () => this._getZipHashes(zipHashUrl),\n );\n }\n\n private async _getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return (\n await this.http.getJson(\n `${TerraformProviderDatasource.hashicorpReleaseUrl}/${backendLookUpName}/${version}/index.json`,\n VersionDetailResponse,\n )\n ).body;\n }\n\n getReleaseBackendIndex(\n backendLookUpName: string,\n version: string,\n ): Promise<VersionDetailResponse> {\n return withCache(\n {\n namespace: `datasource-${TerraformProviderDatasource.id}`,\n key: `getReleaseBackendIndex:${backendLookUpName}/${version}`,\n },\n () => this._getReleaseBackendIndex(backendLookUpName, version),\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { regEx } from "../../../util/regex.js";
|
|
2
|
-
import { LooseArray } from "../../../util/schema-utils/index.js";
|
|
2
|
+
import { LooseArray, LooseRecord } from "../../../util/schema-utils/index.js";
|
|
3
3
|
import { MaybeTimestamp } from "../../../util/timestamp.js";
|
|
4
4
|
import { z } from "zod/v4";
|
|
5
5
|
//#region lib/modules/datasource/terraform-provider/schema.ts
|
|
@@ -65,7 +65,12 @@ const TerraformRegistryBuildResponse = z.object({
|
|
|
65
65
|
download_url: z.string(),
|
|
66
66
|
shasums_url: z.string().optional()
|
|
67
67
|
});
|
|
68
|
+
const OpenTofuProviderPackage = z.object({ hashes: LooseArray(z.string()).catch([]) });
|
|
69
|
+
const OpenTofuProviderPackagesResponse = z.object({ packages: LooseRecord(OpenTofuProviderPackage).catch({}) }).transform(({ packages }) => {
|
|
70
|
+
const allHashes = Object.values(packages).flatMap(({ hashes }) => hashes);
|
|
71
|
+
return allHashes.length ? allHashes : null;
|
|
72
|
+
});
|
|
68
73
|
//#endregion
|
|
69
|
-
export { OpenTofuProviderDocsResponse, TerraformBuild, TerraformProviderReleaseBackend, TerraformProviderV2Response, TerraformProviderVersions, TerraformRegistryBuildResponse, TerraformRegistryVersions, VersionDetailResponse };
|
|
74
|
+
export { OpenTofuProviderDocsResponse, OpenTofuProviderPackagesResponse, TerraformBuild, TerraformProviderReleaseBackend, TerraformProviderV2Response, TerraformProviderVersions, TerraformRegistryBuildResponse, TerraformRegistryVersions, VersionDetailResponse };
|
|
70
75
|
|
|
71
76
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/terraform-provider/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { regEx } from '../../../util/regex.ts';\nimport { LooseArray } from '../../../util/schema-utils/index.ts';\nimport { MaybeTimestamp } from '../../../util/timestamp.ts';\nimport type { Release, ReleaseResult } from '../types.ts';\n\nconst ProviderAttributes = z.object({\n source: z.string().optional(),\n});\n\nconst ProviderVersion = z\n .object({\n type: z.literal('provider-versions'),\n attributes: z.object({\n version: z.string(),\n 'published-at': MaybeTimestamp,\n }),\n })\n .transform(\n (resource): Release => ({\n version: resource.attributes.version,\n releaseTimestamp: resource.attributes['published-at'],\n }),\n );\n\nexport const TerraformProviderV2Response = z\n .object({\n data: z.object({\n attributes: ProviderAttributes,\n }),\n included: LooseArray(ProviderVersion).catch([]),\n })\n .transform(\n (response): ReleaseResult => ({\n sourceUrl: response.data.attributes.source,\n releases: response.included,\n }),\n );\n\nexport type TerraformProviderV2Response = z.infer<\n typeof TerraformProviderV2Response\n>;\n\nconst OpenTofuProviderVersion = z\n .object({\n id: z.string(),\n published: MaybeTimestamp,\n })\n .transform(\n (version): Release => ({\n version: version.id.replace(regEx(/^v/), ''),\n releaseTimestamp: version.published,\n }),\n );\n\nexport const OpenTofuProviderDocsResponse = z\n .object({\n versions: LooseArray(OpenTofuProviderVersion).catch([]),\n })\n .transform(\n (response): ReleaseResult => ({\n releases: response.versions,\n }),\n );\n\nexport type OpenTofuProviderDocsResponse = z.infer<\n typeof OpenTofuProviderDocsResponse\n>;\n\n// VersionDetailResponse — used by the releases.hashicorp.com backend\nexport const TerraformBuild = z.object({\n name: z.string(),\n version: z.string(),\n os: z.string(),\n arch: z.string(),\n filename: z.string(),\n url: z.string(),\n shasums_url: z.string().optional(),\n});\n\nexport type TerraformBuild = z.infer<typeof TerraformBuild>;\n\nexport const VersionDetailResponse = z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n builds: z.array(TerraformBuild),\n});\n\nexport type VersionDetailResponse = z.infer<typeof VersionDetailResponse>;\n\n// TerraformProviderReleaseBackend — index.json from releases.hashicorp.com\nexport const TerraformProviderReleaseBackend = z.object({\n name: z.string().optional(),\n versions: z.record(z.string(), VersionDetailResponse),\n});\n\nexport type TerraformProviderReleaseBackend = z.infer<\n typeof TerraformProviderReleaseBackend\n>;\n\n// TerraformProviderVersions — Provider Registry Protocol /versions endpoint\nconst TerraformProviderVersionsVersion = z.object({\n version: z.string(),\n});\n\nexport const TerraformProviderVersions = z.object({\n versions: LooseArray(TerraformProviderVersionsVersion),\n});\n\nexport type TerraformProviderVersions = z.infer<\n typeof TerraformProviderVersions\n>;\n\n// TerraformRegistryVersions — registry /versions endpoint (for getBuilds)\nconst TerraformRegistryPlatform = z.object({\n os: z.string(),\n arch: z.string(),\n});\n\nconst TerraformRegistryVersionItem = z.object({\n version: z.string(),\n platforms: LooseArray(TerraformRegistryPlatform),\n});\n\nexport const TerraformRegistryVersions = z.object({\n versions: LooseArray(TerraformRegistryVersionItem).optional(),\n});\n\nexport type TerraformRegistryVersions = z.infer<\n typeof TerraformRegistryVersions\n>;\n\n// TerraformRegistryBuildResponse — per-platform download info\nexport const TerraformRegistryBuildResponse = z.object({\n os: z.string(),\n arch: z.string(),\n filename: z.string(),\n download_url: z.string(),\n shasums_url: z.string().optional(),\n});\n\nexport type TerraformRegistryBuildResponse = z.infer<\n typeof TerraformRegistryBuildResponse\n>;\n"],"mappings":";;;;;AAMA,MAAM,qBAAqB,EAAE,OAAO,EAClC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,EAC9B,CAAC;AAED,MAAM,kBAAkB,EACrB,OAAO;CACN,MAAM,EAAE,QAAQ,mBAAmB;CACnC,YAAY,EAAE,OAAO;EACnB,SAAS,EAAE,OAAO;EAClB,gBAAgB;CAClB,CAAC;AACH,CAAC,CAAC,CACD,WACE,cAAuB;CACtB,SAAS,SAAS,WAAW;CAC7B,kBAAkB,SAAS,WAAW;AACxC,EACF;AAEF,MAAa,8BAA8B,EACxC,OAAO;CACN,MAAM,EAAE,OAAO,EACb,YAAY,mBACd,CAAC;CACD,UAAU,WAAW,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC,CAAC,CACD,WACE,cAA6B;CAC5B,WAAW,SAAS,KAAK,WAAW;CACpC,UAAU,SAAS;AACrB,EACF;AAMF,MAAM,0BAA0B,EAC7B,OAAO;CACN,IAAI,EAAE,OAAO;CACb,WAAW;AACb,CAAC,CAAC,CACD,WACE,aAAsB;CACrB,SAAS,QAAQ,GAAG,QAAQ,MAAM,IAAI,GAAG,EAAE;CAC3C,kBAAkB,QAAQ;AAC5B,EACF;AAEF,MAAa,+BAA+B,EACzC,OAAO,EACN,UAAU,WAAW,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,EACxD,CAAC,CAAC,CACD,WACE,cAA6B,EAC5B,UAAU,SAAS,SACrB,EACF;AAOF,MAAa,iBAAiB,EAAE,OAAO;CACrC,MAAM,EAAE,OAAO;CACf,SAAS,EAAE,OAAO;CAClB,IAAI,EAAE,OAAO;CACb,MAAM,EAAE,OAAO;CACf,UAAU,EAAE,OAAO;CACnB,KAAK,EAAE,OAAO;CACd,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;AACnC,CAAC;AAID,MAAa,wBAAwB,EAAE,OAAO;CAC5C,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,QAAQ,EAAE,MAAM,cAAc;AAChC,CAAC;AAKD,MAAa,kCAAkC,EAAE,OAAO;CACtD,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,qBAAqB;AACtD,CAAC;AAOD,MAAM,mCAAmC,EAAE,OAAO,EAChD,SAAS,EAAE,OAAO,EACpB,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO,EAChD,UAAU,WAAW,gCAAgC,EACvD,CAAC;AAOD,MAAM,4BAA4B,EAAE,OAAO;CACzC,IAAI,EAAE,OAAO;CACb,MAAM,EAAE,OAAO;AACjB,CAAC;AAED,MAAM,+BAA+B,EAAE,OAAO;CAC5C,SAAS,EAAE,OAAO;CAClB,WAAW,WAAW,yBAAyB;AACjD,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO,EAChD,UAAU,WAAW,4BAA4B,CAAC,CAAC,SAAS,EAC9D,CAAC;AAOD,MAAa,iCAAiC,EAAE,OAAO;CACrD,IAAI,EAAE,OAAO;CACb,MAAM,EAAE,OAAO;CACf,UAAU,EAAE,OAAO;CACnB,cAAc,EAAE,OAAO;CACvB,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/datasource/terraform-provider/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { regEx } from '../../../util/regex.ts';\nimport { LooseArray, LooseRecord } from '../../../util/schema-utils/index.ts';\nimport { MaybeTimestamp } from '../../../util/timestamp.ts';\nimport type { Release, ReleaseResult } from '../types.ts';\n\nconst ProviderAttributes = z.object({\n source: z.string().optional(),\n});\n\nconst ProviderVersion = z\n .object({\n type: z.literal('provider-versions'),\n attributes: z.object({\n version: z.string(),\n 'published-at': MaybeTimestamp,\n }),\n })\n .transform(\n (resource): Release => ({\n version: resource.attributes.version,\n releaseTimestamp: resource.attributes['published-at'],\n }),\n );\n\nexport const TerraformProviderV2Response = z\n .object({\n data: z.object({\n attributes: ProviderAttributes,\n }),\n included: LooseArray(ProviderVersion).catch([]),\n })\n .transform(\n (response): ReleaseResult => ({\n sourceUrl: response.data.attributes.source,\n releases: response.included,\n }),\n );\n\nexport type TerraformProviderV2Response = z.infer<\n typeof TerraformProviderV2Response\n>;\n\nconst OpenTofuProviderVersion = z\n .object({\n id: z.string(),\n published: MaybeTimestamp,\n })\n .transform(\n (version): Release => ({\n version: version.id.replace(regEx(/^v/), ''),\n releaseTimestamp: version.published,\n }),\n );\n\nexport const OpenTofuProviderDocsResponse = z\n .object({\n versions: LooseArray(OpenTofuProviderVersion).catch([]),\n })\n .transform(\n (response): ReleaseResult => ({\n releases: response.versions,\n }),\n );\n\nexport type OpenTofuProviderDocsResponse = z.infer<\n typeof OpenTofuProviderDocsResponse\n>;\n\n// VersionDetailResponse — used by the releases.hashicorp.com backend\nexport const TerraformBuild = z.object({\n name: z.string(),\n version: z.string(),\n os: z.string(),\n arch: z.string(),\n filename: z.string(),\n url: z.string(),\n shasums_url: z.string().optional(),\n});\n\nexport type TerraformBuild = z.infer<typeof TerraformBuild>;\n\nexport const VersionDetailResponse = z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n builds: z.array(TerraformBuild),\n});\n\nexport type VersionDetailResponse = z.infer<typeof VersionDetailResponse>;\n\n// TerraformProviderReleaseBackend — index.json from releases.hashicorp.com\nexport const TerraformProviderReleaseBackend = z.object({\n name: z.string().optional(),\n versions: z.record(z.string(), VersionDetailResponse),\n});\n\nexport type TerraformProviderReleaseBackend = z.infer<\n typeof TerraformProviderReleaseBackend\n>;\n\n// TerraformProviderVersions — Provider Registry Protocol /versions endpoint\nconst TerraformProviderVersionsVersion = z.object({\n version: z.string(),\n});\n\nexport const TerraformProviderVersions = z.object({\n versions: LooseArray(TerraformProviderVersionsVersion),\n});\n\nexport type TerraformProviderVersions = z.infer<\n typeof TerraformProviderVersions\n>;\n\n// TerraformRegistryVersions — registry /versions endpoint (for getBuilds)\nconst TerraformRegistryPlatform = z.object({\n os: z.string(),\n arch: z.string(),\n});\n\nconst TerraformRegistryVersionItem = z.object({\n version: z.string(),\n platforms: LooseArray(TerraformRegistryPlatform),\n});\n\nexport const TerraformRegistryVersions = z.object({\n versions: LooseArray(TerraformRegistryVersionItem).optional(),\n});\n\nexport type TerraformRegistryVersions = z.infer<\n typeof TerraformRegistryVersions\n>;\n\n// TerraformRegistryBuildResponse — per-platform download info\nexport const TerraformRegistryBuildResponse = z.object({\n os: z.string(),\n arch: z.string(),\n filename: z.string(),\n download_url: z.string(),\n shasums_url: z.string().optional(),\n});\n\nexport type TerraformRegistryBuildResponse = z.infer<\n typeof TerraformRegistryBuildResponse\n>;\n\n// OpenTofuProviderPackagesResponse — per-platform download endpoint exposes a\n// `packages` map containing the `zh:`/`h1:` hashes for every platform.\nconst OpenTofuProviderPackage = z.object({\n hashes: LooseArray(z.string()).catch([]),\n});\n\nexport const OpenTofuProviderPackagesResponse = z\n .object({\n packages: LooseRecord(OpenTofuProviderPackage).catch({}),\n })\n .transform(({ packages }): string[] | null => {\n const allHashes = Object.values(packages).flatMap(({ hashes }) => hashes);\n return allHashes.length ? allHashes : null;\n });\n\nexport type OpenTofuProviderPackagesResponse = z.infer<\n typeof OpenTofuProviderPackagesResponse\n>;\n"],"mappings":"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"}
|
|
@@ -104,7 +104,7 @@ hashMap.set("smithy", "9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf5
|
|
|
104
104
|
hashMap.set("sveltos", "05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e");
|
|
105
105
|
hashMap.set("swift", "eb5f7c3c4dabf28eed36916269ca9be16ab9ddb83993db03ea66b9195ad7bdc6");
|
|
106
106
|
hashMap.set("tekton", "fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd");
|
|
107
|
-
hashMap.set("terraform", "
|
|
107
|
+
hashMap.set("terraform", "73f9d1753d1077585bd264163b7bfacaf6cf20b586b233cbb8cf058a9fce0103");
|
|
108
108
|
hashMap.set("terraform-version", "ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa");
|
|
109
109
|
hashMap.set("terragrunt", "ffcbaa67dd65f064d43f8c121c1006115eab1879c4bd38de263b9b90a009c118");
|
|
110
110
|
hashMap.set("terragrunt-version", "eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1d3568f42393d697f8f96d461b72077ee7a1044b654e87667a12f861b3083111');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','b2acfc0a6164e9a279daa724777c423f84572dafb0df09b1b0cf6f205f9eb6d0');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','bd9208444eff1a4958061484db66a47b616c31f15a8d49d23b75c4560fcee83e');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4994a8bd86d5bfb169d67c08efd8509b58c368c2bf3dd9bbe42553c0fabc3f1a');\nhashMap.set('bazel-module','40f6a862b4e72fcc7262ee41f8b570ea3fd5600d6d552b94ed3301bb201f5db5');\nhashMap.set('bazelisk','d71489650feefb0dbbe7461f924cb50e41c8eef8fe2e11acdec2d42d0212c8ef');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','691aa0bd20c20f7e05be5d231ed14dccdf81b9399d062448794176403aa53d94');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','4f70ac0377893683eb30013bf4d23a8bd7213a883847c9eaadf1217f5f190ee1');\nhashMap.set('cake','ed6d14c96161f1d3d927adc7e333b96585164e1f25151a87990914d57ae17fe1');\nhashMap.set('cargo','13377c53df158cdfc58330f73682fadc3e88e57f0d22c9245c0ffd62a495edf1');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','cf48ab5a573a28bf14d5e6c84eed9ca08b7f0cb5b7fc51d795c21c7254bb9dd1');\nhashMap.set('composer','869aab556d9b2ca2b743a790a7c0d7d104d62bbcbcc2185c44c64543d70413ba');\nhashMap.set('conan','74ca922a0ffdf1a9dd44b83eb2b3a36c56c7d792031e3a4a484f293046be3ecd');\nhashMap.set('copier','06a52206ba5542f99f056c832245196afd4b78bffeca088f710a5df958a9693d');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','a43016a9a469e0472f00855c8db64bb65ef5ffa773e7bbfade02a21400f67690');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','a608d1e6db93a8f997d41f8dee7b67533452a956057865978342e2819272e0a9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','54122792bf8ea0be98e0a0716e627e3115b40a5f0155ccd7ae0cfc52424a3478');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','70833dd068ea0a746a9392469e7904021562c7629428d0cd554603bad4eb6ce5');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','e95bbc9b69a36dee82e255e8983640b7179cb5f17d24b035c6cf01d9635b35bd');\nhashMap.set('github-actions','0a77751d4307d7e923bf2d05bf49084e77a23d7f1e498a1373202dd1ebdcc48a');\nhashMap.set('gitlabci','33c264edf7837fb8fbc4cf0078c8bd2d5a75431039b1db65bf47356df7753125');\nhashMap.set('gitlabci-include','ef696c478c2ac1723b3aca070ba9779be0e702fff0844054251ba0029523d0eb');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','02389785183c39d2896d7893414c5e1060023f95c1fe7b595bd06cc5c1186d39');\nhashMap.set('gomod','7e9befd57c32420da2061445defde5a02bebf4898bef0106614bab95a8713a2f');\nhashMap.set('gradle','550f1107f0ac27d18fa76a7d5c0c0b317b5df4156fc12cfd378573ccfe26fca0');\nhashMap.set('gradle-wrapper','799d9bb8d9dead673fb513ba4936395f14da30897d33a9df46b3266e1b835d5d');\nhashMap.set('haskell-cabal','f232d0e883235f74ed71fd9de4a7468e5fcbda9a1af5beb56c24657f7bf2e891');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','ab828a1877cfe029ed5f8dd2a026409cd5e6431705af3aac3f56a3bc4f827508');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','4088a90bd8be4ae1bcb85dc4d34d3fbbb75e72bd33d144284e7e1f0e726c8d3b');\nhashMap.set('hermit','61e132cfccbe4e3884801a3728f3391455c214811a33c1f733b0dea7122bbbb6');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','9c64a4f1475b1c2052372e566c9190f32ae8acd1c54313031d55ae8772388367');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4023ef4cac55fe58f8d9744ae86b13532298926e35e22d250334cde55c3386ff');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','fb5f6fbf45b318ca277d6d9f7fee22680f4b99c7ff9170a50315122918d2e007');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','f084cdc88320ca1e82af957d0008e7c9ce991d3282cb428f3108a5722239cead');\nhashMap.set('maven-wrapper','779344a4e259e0c28bfadfeb435dd72feb7224d7346d038a1c35f02deb1357bc');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','8463d355091f5f167e3f4a8adbebfe49310ad9ac45c89d60455ef8e110df4a49');\nhashMap.set('mix','5eb001e2af7cd664d811ad2d9928bf785527ed292de1e567de57f7e2cecc1ecc');\nhashMap.set('nix','d3283c2b948695a16c1089da4e2689faacd50eaa7d734d6fa5d6661aef6db7e7');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','95ddcec26d4db9ee54028f00fdcac118c458cd1513623737dd1b3f79d05a11a4');\nhashMap.set('nuget','d4f3c5cbc0f6e6e8baf80b8ad8e184d186ff6686486b1c97995a0c87151abbe3');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f5dc3c8434845dd814bc649c619323dcb69e3ec5da2d361d353bdf6ae3cc5d88');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','9711b1c00da18ff785e624c50e4b042519e7ad615c5f018f08459fac8394fec5');\nhashMap.set('pip_requirements','537ef9d7b43b5adcfbfbb86392e0c7a8a0ee91c804118af83cf92e1868949e1a');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','a7d45859427263c17f1109a08c8b48a1f24812290f9853013ec1774f2484a769');\nhashMap.set('pixi','3732f052617efd5007ddbe31091a2ba026909288bac4cbbe6d2bd6ac64d85393');\nhashMap.set('poetry','6cf6bc5116458761b2d6779caf465d6e26768fbe6e2ffba54b5da981aa8c385f');\nhashMap.set('pre-commit','17a5f183985ebffe98785a541d3609bf25efedc387deb3d50e9f00f02b25f615');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','a2ded51959d48e053b811b3b9330b2460fc61d0fc2e74a400a546e4f82d25767');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e1fc88a4e14cd595e89bb3d79b4adf2add3ce5eb80f75276e712c32598cca53d');\nhashMap.set('renovate-config','ca60beee2e3b871ea1216fa9df9a501f7ed355fe7da29e12509e56a124a78e69');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720');\nhashMap.set('sbt','e508c2e2fb8d44e6cbec20f449c8eed096728566e6058187269c637930d388fb');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e');\nhashMap.set('swift','eb5f7c3c4dabf28eed36916269ca9be16ab9ddb83993db03ea66b9195ad7bdc6');\nhashMap.set('tekton','fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd');\nhashMap.set('terraform','b6723d78863803e688d2b85cc72bc43657d79ff0cca3bc719e7d96cfd34ceb69');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','ffcbaa67dd65f064d43f8c121c1006115eab1879c4bd38de263b9b90a009c118');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','31247d37bc80aae17039bfa21bd989c5717730c5ef10cf2a6f09841576d012ec');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','ee9cc316c73ab0944da494bf36cfeafba8e79a36ec77753b9f341c8e80f1d602');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','416bcf61144b276b3112814c6e6d261aa29608f46fbb0516c471d35c16f8f0d7');\nhashMap.set('regex','dbe6889ea021a05127fed06226d73366fdada2ae577147a5c027996fd325416e');"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1d3568f42393d697f8f96d461b72077ee7a1044b654e87667a12f861b3083111');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','b2acfc0a6164e9a279daa724777c423f84572dafb0df09b1b0cf6f205f9eb6d0');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','bd9208444eff1a4958061484db66a47b616c31f15a8d49d23b75c4560fcee83e');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4994a8bd86d5bfb169d67c08efd8509b58c368c2bf3dd9bbe42553c0fabc3f1a');\nhashMap.set('bazel-module','40f6a862b4e72fcc7262ee41f8b570ea3fd5600d6d552b94ed3301bb201f5db5');\nhashMap.set('bazelisk','d71489650feefb0dbbe7461f924cb50e41c8eef8fe2e11acdec2d42d0212c8ef');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','691aa0bd20c20f7e05be5d231ed14dccdf81b9399d062448794176403aa53d94');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','4f70ac0377893683eb30013bf4d23a8bd7213a883847c9eaadf1217f5f190ee1');\nhashMap.set('cake','ed6d14c96161f1d3d927adc7e333b96585164e1f25151a87990914d57ae17fe1');\nhashMap.set('cargo','13377c53df158cdfc58330f73682fadc3e88e57f0d22c9245c0ffd62a495edf1');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','cf48ab5a573a28bf14d5e6c84eed9ca08b7f0cb5b7fc51d795c21c7254bb9dd1');\nhashMap.set('composer','869aab556d9b2ca2b743a790a7c0d7d104d62bbcbcc2185c44c64543d70413ba');\nhashMap.set('conan','74ca922a0ffdf1a9dd44b83eb2b3a36c56c7d792031e3a4a484f293046be3ecd');\nhashMap.set('copier','06a52206ba5542f99f056c832245196afd4b78bffeca088f710a5df958a9693d');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','a43016a9a469e0472f00855c8db64bb65ef5ffa773e7bbfade02a21400f67690');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','a608d1e6db93a8f997d41f8dee7b67533452a956057865978342e2819272e0a9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','54122792bf8ea0be98e0a0716e627e3115b40a5f0155ccd7ae0cfc52424a3478');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','70833dd068ea0a746a9392469e7904021562c7629428d0cd554603bad4eb6ce5');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','e95bbc9b69a36dee82e255e8983640b7179cb5f17d24b035c6cf01d9635b35bd');\nhashMap.set('github-actions','0a77751d4307d7e923bf2d05bf49084e77a23d7f1e498a1373202dd1ebdcc48a');\nhashMap.set('gitlabci','33c264edf7837fb8fbc4cf0078c8bd2d5a75431039b1db65bf47356df7753125');\nhashMap.set('gitlabci-include','ef696c478c2ac1723b3aca070ba9779be0e702fff0844054251ba0029523d0eb');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','02389785183c39d2896d7893414c5e1060023f95c1fe7b595bd06cc5c1186d39');\nhashMap.set('gomod','7e9befd57c32420da2061445defde5a02bebf4898bef0106614bab95a8713a2f');\nhashMap.set('gradle','550f1107f0ac27d18fa76a7d5c0c0b317b5df4156fc12cfd378573ccfe26fca0');\nhashMap.set('gradle-wrapper','799d9bb8d9dead673fb513ba4936395f14da30897d33a9df46b3266e1b835d5d');\nhashMap.set('haskell-cabal','f232d0e883235f74ed71fd9de4a7468e5fcbda9a1af5beb56c24657f7bf2e891');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','ab828a1877cfe029ed5f8dd2a026409cd5e6431705af3aac3f56a3bc4f827508');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','4088a90bd8be4ae1bcb85dc4d34d3fbbb75e72bd33d144284e7e1f0e726c8d3b');\nhashMap.set('hermit','61e132cfccbe4e3884801a3728f3391455c214811a33c1f733b0dea7122bbbb6');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','9c64a4f1475b1c2052372e566c9190f32ae8acd1c54313031d55ae8772388367');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4023ef4cac55fe58f8d9744ae86b13532298926e35e22d250334cde55c3386ff');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','fb5f6fbf45b318ca277d6d9f7fee22680f4b99c7ff9170a50315122918d2e007');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','f084cdc88320ca1e82af957d0008e7c9ce991d3282cb428f3108a5722239cead');\nhashMap.set('maven-wrapper','779344a4e259e0c28bfadfeb435dd72feb7224d7346d038a1c35f02deb1357bc');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','8463d355091f5f167e3f4a8adbebfe49310ad9ac45c89d60455ef8e110df4a49');\nhashMap.set('mix','5eb001e2af7cd664d811ad2d9928bf785527ed292de1e567de57f7e2cecc1ecc');\nhashMap.set('nix','d3283c2b948695a16c1089da4e2689faacd50eaa7d734d6fa5d6661aef6db7e7');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','95ddcec26d4db9ee54028f00fdcac118c458cd1513623737dd1b3f79d05a11a4');\nhashMap.set('nuget','d4f3c5cbc0f6e6e8baf80b8ad8e184d186ff6686486b1c97995a0c87151abbe3');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f5dc3c8434845dd814bc649c619323dcb69e3ec5da2d361d353bdf6ae3cc5d88');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','9711b1c00da18ff785e624c50e4b042519e7ad615c5f018f08459fac8394fec5');\nhashMap.set('pip_requirements','537ef9d7b43b5adcfbfbb86392e0c7a8a0ee91c804118af83cf92e1868949e1a');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','a7d45859427263c17f1109a08c8b48a1f24812290f9853013ec1774f2484a769');\nhashMap.set('pixi','3732f052617efd5007ddbe31091a2ba026909288bac4cbbe6d2bd6ac64d85393');\nhashMap.set('poetry','6cf6bc5116458761b2d6779caf465d6e26768fbe6e2ffba54b5da981aa8c385f');\nhashMap.set('pre-commit','17a5f183985ebffe98785a541d3609bf25efedc387deb3d50e9f00f02b25f615');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','a2ded51959d48e053b811b3b9330b2460fc61d0fc2e74a400a546e4f82d25767');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e1fc88a4e14cd595e89bb3d79b4adf2add3ce5eb80f75276e712c32598cca53d');\nhashMap.set('renovate-config','ca60beee2e3b871ea1216fa9df9a501f7ed355fe7da29e12509e56a124a78e69');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720');\nhashMap.set('sbt','e508c2e2fb8d44e6cbec20f449c8eed096728566e6058187269c637930d388fb');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e');\nhashMap.set('swift','eb5f7c3c4dabf28eed36916269ca9be16ab9ddb83993db03ea66b9195ad7bdc6');\nhashMap.set('tekton','fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd');\nhashMap.set('terraform','73f9d1753d1077585bd264163b7bfacaf6cf20b586b233cbb8cf058a9fce0103');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','ffcbaa67dd65f064d43f8c121c1006115eab1879c4bd38de263b9b90a009c118');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','31247d37bc80aae17039bfa21bd989c5717730c5ef10cf2a6f09841576d012ec');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','ee9cc316c73ab0944da494bf36cfeafba8e79a36ec77753b9f341c8e80f1d602');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','416bcf61144b276b3112814c6e6d261aa29608f46fbb0516c471d35c16f8f0d7');\nhashMap.set('regex','dbe6889ea021a05127fed06226d73366fdada2ae577147a5c027996fd325416e');"],"mappings":"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"}
|
|
@@ -103,6 +103,14 @@ var TerraformProviderHash = class TerraformProviderHash {
|
|
|
103
103
|
}
|
|
104
104
|
static async createHashes(registryURL, repository, version) {
|
|
105
105
|
logger.debug(`Creating hashes for ${repository}@${version} (${registryURL})`);
|
|
106
|
+
if (registryURL === TerraformProviderDatasource.openTofuRegistryUrl || registryURL === TerraformProviderDatasource.openTofuApiUrl) {
|
|
107
|
+
const packagesHashes = await TerraformProviderHash.terraformDatasource.getProviderPackages(repository, version);
|
|
108
|
+
if (packagesHashes?.length) {
|
|
109
|
+
logger.debug(`Using OpenTofu packages API for ${repository}@${version}`);
|
|
110
|
+
return deduplicateArray(packagesHashes).sort();
|
|
111
|
+
}
|
|
112
|
+
logger.debug(`OpenTofu packages field unavailable for ${repository}@${version}, falling back to zip download`);
|
|
113
|
+
}
|
|
106
114
|
const builds = await TerraformProviderHash.terraformDatasource.getBuilds(registryURL, repository, version);
|
|
107
115
|
if (!builds) return null;
|
|
108
116
|
const shaUrls = deduplicateArray(builds.map((build) => build.shasums_url).filter(isNotNullOrUndefined));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","names":["fs.createCacheWriteStream","fs.pipeline","fs.rmCache","fs.ensureCacheDir","p.map"],"sources":["../../../../../lib/modules/manager/terraform/lockfile/hash.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport { once } from 'node:events';\nimport { Transform, type TransformCallback } from 'node:stream';\nimport { crc32 } from 'node:zlib';\nimport upath from 'upath';\nimport { openPromise, validateFileName } from 'yauzl';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n coerceArray,\n deduplicateArray,\n isNotNullOrUndefined,\n} from '../../../../util/array.ts';\nimport { withCache } from '../../../../util/cache/package/with-cache.ts';\nimport * as fs from '../../../../util/fs/index.ts';\nimport { hashStream } from '../../../../util/hash.ts';\nimport { Http } from '../../../../util/http/index.ts';\nimport * as p from '../../../../util/promises.ts';\nimport { TerraformProviderDatasource } from '../../../datasource/terraform-provider/index.ts';\nimport type { TerraformBuild } from '../../../datasource/terraform-provider/schema.ts';\n\nclass Crc32Stream extends Transform {\n checksum = 0;\n\n override _transform(\n chunk: Buffer,\n _encoding: BufferEncoding,\n callback: TransformCallback,\n ): void {\n this.checksum = crc32(chunk, this.checksum);\n callback(null, chunk);\n }\n}\n\nexport class TerraformProviderHash {\n static http = new Http(TerraformProviderDatasource.id);\n\n static terraformDatasource = new TerraformProviderDatasource();\n\n static hashCacheTTL = 10080; // in minutes == 1 week\n\n /**\n * Computes the `h1:` checksum used in Terraform dependency lock files.\n *\n * Terraform verifies extracted providers with Go's `HashDir`, which ignores\n * ZIP directory entries. Ignore them here so the archive produces the same\n * checksum as the extracted provider.\n *\n * See https://github.com/golang/go/issues/53448.\n */\n static async hashOfZipContent(zipFilePath: string): Promise<string> {\n const zipFile = await openPromise(zipFilePath, {\n autoClose: false,\n decodeStrings: false,\n });\n const entryHashes: { path: Buffer; hash: string }[] = [];\n const entryPaths = new Set<string>();\n\n try {\n for await (const entry of zipFile.eachEntry()) {\n // Go's ZIP reader preserves the central-directory name bytes instead of decoding CP437 or Unicode path fields.\n const fileName = entry.fileNameRaw\n .toString('latin1')\n .replaceAll('\\\\', '/');\n\n // Terraform verifies extracted packages with Go HashDir semantics, which omit directory records.\n if (fileName.endsWith('/')) {\n continue;\n }\n if (fileName.includes('\\n')) {\n throw new Error('ZIP entry name contains a newline');\n }\n const fileNameError = validateFileName(fileName);\n if (fileNameError) {\n throw new Error(fileNameError);\n }\n const normalizedPath = upath.normalize(fileName);\n if (entryPaths.has(normalizedPath)) {\n throw new Error(`Duplicate ZIP entry path: ${normalizedPath}`);\n }\n entryPaths.add(normalizedPath);\n const path = Buffer.from(normalizedPath, 'latin1');\n\n const entryStream = await zipFile.openReadStreamPromise(entry);\n const crc32Stream = new Crc32Stream();\n const hash = await hashStream(\n entryStream.compose(crc32Stream),\n 'sha256',\n );\n if (crc32Stream.checksum !== entry.crc32) {\n throw new Error(\n `CRC-32 mismatch for ZIP entry ${entry.fileNameRaw.toString('utf8')}`,\n );\n }\n entryHashes.push({ path, hash });\n }\n } finally {\n const closePromise = once(zipFile, 'close');\n zipFile.close();\n await closePromise;\n }\n\n entryHashes.sort((left, right) => Buffer.compare(left.path, right.path));\n\n const rootHash = crypto.createHash('sha256');\n for (const entry of entryHashes) {\n rootHash.update(`${entry.hash} `);\n rootHash.update(entry.path);\n rootHash.update('\\n');\n }\n\n return rootHash.digest('base64');\n }\n\n private static async _calculateSingleHash(\n build: TerraformBuild,\n cacheDir: string,\n ): Promise<string> {\n const downloadFileName = upath.join(cacheDir, crypto.randomUUID());\n logger.trace(\n `Downloading archive and generating hash for ${build.name}-${build.version}...`,\n );\n const startTime = Date.now();\n const readStream = TerraformProviderHash.http.stream(build.url);\n const writeStream = fs.createCacheWriteStream(downloadFileName);\n\n try {\n await fs.pipeline(readStream, writeStream);\n\n const hash = await this.hashOfZipContent(downloadFileName);\n logger.debug(\n `Hash generation for ${build.url} took ${Date.now() - startTime}ms for ${build.name}-${build.version}`,\n );\n return hash;\n } finally {\n await fs.rmCache(downloadFileName);\n }\n }\n\n static calculateSingleHash(\n build: TerraformBuild,\n cacheDir: string,\n ): Promise<string> {\n return withCache(\n {\n namespace: `terraform-provider-hash`,\n key: `calculateSingleHash:${build.url}`,\n ttlMinutes: TerraformProviderHash.hashCacheTTL,\n },\n () => TerraformProviderHash._calculateSingleHash(build, cacheDir),\n );\n }\n\n static async calculateHashScheme1Hashes(\n builds: TerraformBuild[],\n ): Promise<string[]> {\n logger.debug(`Calculating hashes for ${builds.length} builds`);\n const cacheDir = await fs.ensureCacheDir('terraform');\n\n return p.map(builds, (build) => this.calculateSingleHash(build, cacheDir), {\n concurrency: 4,\n });\n }\n\n static async createHashes(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<string[] | null> {\n logger.debug(\n `Creating hashes for ${repository}@${version} (${registryURL})`,\n );\n const builds = await TerraformProviderHash.terraformDatasource.getBuilds(\n registryURL,\n repository,\n version,\n );\n if (!builds) {\n return null;\n }\n\n // check if the publisher uses one shasum file for all builds or separate ones\n // we deduplicate to reduce the number of API calls\n const shaUrls = deduplicateArray(\n builds.map((build) => build.shasums_url).filter(isNotNullOrUndefined),\n );\n\n logger.debug(\n `Getting zip hashes for ${shaUrls.length} shasum URL(s) for ${repository}@${version}`,\n );\n\n const zhHashes: string[] = [];\n for (const shaUrl of shaUrls) {\n const hashes =\n await TerraformProviderHash.terraformDatasource.getZipHashes(shaUrl);\n\n zhHashes.push(...coerceArray(hashes));\n }\n\n logger.debug(\n `Got ${zhHashes.length} zip hashes for ${repository}@${version}`,\n );\n\n const h1Hashes =\n await TerraformProviderHash.calculateHashScheme1Hashes(builds);\n\n const hashes = [];\n hashes.push(...h1Hashes.map((hash) => `h1:${hash}`));\n hashes.push(...zhHashes.map((hash) => `zh:${hash}`));\n\n // hashes are a logical set which Terraform deduplicates and sorts\n return deduplicateArray(hashes).sort();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hash.js","names":["fs.createCacheWriteStream","fs.pipeline","fs.rmCache","fs.ensureCacheDir","p.map"],"sources":["../../../../../lib/modules/manager/terraform/lockfile/hash.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport { once } from 'node:events';\nimport { Transform, type TransformCallback } from 'node:stream';\nimport { crc32 } from 'node:zlib';\nimport upath from 'upath';\nimport { openPromise, validateFileName } from 'yauzl';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n coerceArray,\n deduplicateArray,\n isNotNullOrUndefined,\n} from '../../../../util/array.ts';\nimport { withCache } from '../../../../util/cache/package/with-cache.ts';\nimport * as fs from '../../../../util/fs/index.ts';\nimport { hashStream } from '../../../../util/hash.ts';\nimport { Http } from '../../../../util/http/index.ts';\nimport * as p from '../../../../util/promises.ts';\nimport { TerraformProviderDatasource } from '../../../datasource/terraform-provider/index.ts';\nimport type { TerraformBuild } from '../../../datasource/terraform-provider/schema.ts';\n\nclass Crc32Stream extends Transform {\n checksum = 0;\n\n override _transform(\n chunk: Buffer,\n _encoding: BufferEncoding,\n callback: TransformCallback,\n ): void {\n this.checksum = crc32(chunk, this.checksum);\n callback(null, chunk);\n }\n}\n\nexport class TerraformProviderHash {\n static http = new Http(TerraformProviderDatasource.id);\n\n static terraformDatasource = new TerraformProviderDatasource();\n\n static hashCacheTTL = 10080; // in minutes == 1 week\n\n /**\n * Computes the `h1:` checksum used in Terraform dependency lock files.\n *\n * Terraform verifies extracted providers with Go's `HashDir`, which ignores\n * ZIP directory entries. Ignore them here so the archive produces the same\n * checksum as the extracted provider.\n *\n * See https://github.com/golang/go/issues/53448.\n */\n static async hashOfZipContent(zipFilePath: string): Promise<string> {\n const zipFile = await openPromise(zipFilePath, {\n autoClose: false,\n decodeStrings: false,\n });\n const entryHashes: { path: Buffer; hash: string }[] = [];\n const entryPaths = new Set<string>();\n\n try {\n for await (const entry of zipFile.eachEntry()) {\n // Go's ZIP reader preserves the central-directory name bytes instead of decoding CP437 or Unicode path fields.\n const fileName = entry.fileNameRaw\n .toString('latin1')\n .replaceAll('\\\\', '/');\n\n // Terraform verifies extracted packages with Go HashDir semantics, which omit directory records.\n if (fileName.endsWith('/')) {\n continue;\n }\n if (fileName.includes('\\n')) {\n throw new Error('ZIP entry name contains a newline');\n }\n const fileNameError = validateFileName(fileName);\n if (fileNameError) {\n throw new Error(fileNameError);\n }\n const normalizedPath = upath.normalize(fileName);\n if (entryPaths.has(normalizedPath)) {\n throw new Error(`Duplicate ZIP entry path: ${normalizedPath}`);\n }\n entryPaths.add(normalizedPath);\n const path = Buffer.from(normalizedPath, 'latin1');\n\n const entryStream = await zipFile.openReadStreamPromise(entry);\n const crc32Stream = new Crc32Stream();\n const hash = await hashStream(\n entryStream.compose(crc32Stream),\n 'sha256',\n );\n if (crc32Stream.checksum !== entry.crc32) {\n throw new Error(\n `CRC-32 mismatch for ZIP entry ${entry.fileNameRaw.toString('utf8')}`,\n );\n }\n entryHashes.push({ path, hash });\n }\n } finally {\n const closePromise = once(zipFile, 'close');\n zipFile.close();\n await closePromise;\n }\n\n entryHashes.sort((left, right) => Buffer.compare(left.path, right.path));\n\n const rootHash = crypto.createHash('sha256');\n for (const entry of entryHashes) {\n rootHash.update(`${entry.hash} `);\n rootHash.update(entry.path);\n rootHash.update('\\n');\n }\n\n return rootHash.digest('base64');\n }\n\n private static async _calculateSingleHash(\n build: TerraformBuild,\n cacheDir: string,\n ): Promise<string> {\n const downloadFileName = upath.join(cacheDir, crypto.randomUUID());\n logger.trace(\n `Downloading archive and generating hash for ${build.name}-${build.version}...`,\n );\n const startTime = Date.now();\n const readStream = TerraformProviderHash.http.stream(build.url);\n const writeStream = fs.createCacheWriteStream(downloadFileName);\n\n try {\n await fs.pipeline(readStream, writeStream);\n\n const hash = await this.hashOfZipContent(downloadFileName);\n logger.debug(\n `Hash generation for ${build.url} took ${Date.now() - startTime}ms for ${build.name}-${build.version}`,\n );\n return hash;\n } finally {\n await fs.rmCache(downloadFileName);\n }\n }\n\n static calculateSingleHash(\n build: TerraformBuild,\n cacheDir: string,\n ): Promise<string> {\n return withCache(\n {\n namespace: `terraform-provider-hash`,\n key: `calculateSingleHash:${build.url}`,\n ttlMinutes: TerraformProviderHash.hashCacheTTL,\n },\n () => TerraformProviderHash._calculateSingleHash(build, cacheDir),\n );\n }\n\n static async calculateHashScheme1Hashes(\n builds: TerraformBuild[],\n ): Promise<string[]> {\n logger.debug(`Calculating hashes for ${builds.length} builds`);\n const cacheDir = await fs.ensureCacheDir('terraform');\n\n return p.map(builds, (build) => this.calculateSingleHash(build, cacheDir), {\n concurrency: 4,\n });\n }\n\n static async createHashes(\n registryURL: string,\n repository: string,\n version: string,\n ): Promise<string[] | null> {\n logger.debug(\n `Creating hashes for ${repository}@${version} (${registryURL})`,\n );\n\n if (\n registryURL === TerraformProviderDatasource.openTofuRegistryUrl ||\n registryURL === TerraformProviderDatasource.openTofuApiUrl\n ) {\n const packagesHashes =\n await TerraformProviderHash.terraformDatasource.getProviderPackages(\n repository,\n version,\n );\n if (packagesHashes?.length) {\n logger.debug(\n `Using OpenTofu packages API for ${repository}@${version}`,\n );\n // hashes are a logical set which Terraform deduplicates and sorts\n return deduplicateArray(packagesHashes).sort();\n }\n logger.debug(\n `OpenTofu packages field unavailable for ${repository}@${version}, falling back to zip download`,\n );\n }\n\n const builds = await TerraformProviderHash.terraformDatasource.getBuilds(\n registryURL,\n repository,\n version,\n );\n if (!builds) {\n return null;\n }\n\n // check if the publisher uses one shasum file for all builds or separate ones\n // we deduplicate to reduce the number of API calls\n const shaUrls = deduplicateArray(\n builds.map((build) => build.shasums_url).filter(isNotNullOrUndefined),\n );\n\n logger.debug(\n `Getting zip hashes for ${shaUrls.length} shasum URL(s) for ${repository}@${version}`,\n );\n\n const zhHashes: string[] = [];\n for (const shaUrl of shaUrls) {\n const hashes =\n await TerraformProviderHash.terraformDatasource.getZipHashes(shaUrl);\n\n zhHashes.push(...coerceArray(hashes));\n }\n\n logger.debug(\n `Got ${zhHashes.length} zip hashes for ${repository}@${version}`,\n );\n\n const h1Hashes =\n await TerraformProviderHash.calculateHashScheme1Hashes(builds);\n\n const hashes = [];\n hashes.push(...h1Hashes.map((hash) => `h1:${hash}`));\n hashes.push(...zhHashes.map((hash) => `zh:${hash}`));\n\n // hashes are a logical set which Terraform deduplicates and sorts\n return deduplicateArray(hashes).sort();\n }\n}\n"],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ query($owner: String!, $name: String!, $user: String) {
|
|
|
16
16
|
mergeCommitAllowed
|
|
17
17
|
rebaseMergeAllowed
|
|
18
18
|
squashMergeAllowed
|
|
19
|
+
mergeQueue { id }
|
|
19
20
|
defaultBranchRef {
|
|
20
21
|
name
|
|
21
22
|
target {
|
|
@@ -68,6 +69,24 @@ query(
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
`;
|
|
72
|
+
const repoMergeQueueQuery = `
|
|
73
|
+
query($owner: String!, $name: String!, $branch: String!) {
|
|
74
|
+
repository(owner: $owner, name: $name) {
|
|
75
|
+
mergeQueue(branch: $branch) {
|
|
76
|
+
id
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
`;
|
|
81
|
+
const prIsInMergeQueueQuery = `
|
|
82
|
+
query($owner: String!, $name: String!, $number: Int!) {
|
|
83
|
+
repository(owner: $owner, name: $name) {
|
|
84
|
+
pullRequest(number: $number) {
|
|
85
|
+
isInMergeQueue
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
71
90
|
const enableAutoMergeMutation = `
|
|
72
91
|
mutation EnablePullRequestAutoMerge(
|
|
73
92
|
$pullRequestId: ID!,
|
|
@@ -90,6 +109,6 @@ mutation EnablePullRequestAutoMerge(
|
|
|
90
109
|
}
|
|
91
110
|
`;
|
|
92
111
|
//#endregion
|
|
93
|
-
export { enableAutoMergeMutation, getIssuesQuery, repoInfoQuery };
|
|
112
|
+
export { enableAutoMergeMutation, getIssuesQuery, prIsInMergeQueueQuery, repoInfoQuery, repoMergeQueueQuery };
|
|
94
113
|
|
|
95
114
|
//# sourceMappingURL=graphql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.js","names":[],"sources":["../../../../lib/modules/platform/github/graphql.ts"],"sourcesContent":["export const repoInfoQuery = `\nquery($owner: String!, $name: String!, $user: String) {\n repository(owner: $owner, name: $name) {\n id\n sshUrl\n isFork\n parent {\n nameWithOwner\n }\n isArchived\n nameWithOwner\n hasIssuesEnabled\n hasVulnerabilityAlertsEnabled\n autoMergeAllowed\n mergeCommitAllowed\n rebaseMergeAllowed\n squashMergeAllowed\n defaultBranchRef {\n name\n target {\n oid\n }\n }\n issues(\n orderBy: { field: UPDATED_AT, direction: DESC },\n filterBy: { createdBy: $user },\n first: 5\n ) {\n nodes {\n number\n state\n title\n body\n updatedAt\n }\n }\n }\n}\n`;\n\nexport const getIssuesQuery = `\nquery(\n $owner: String!,\n $name: String!,\n $user: String,\n $count: Int,\n $cursor: String\n) {\n repository(owner: $owner, name: $name) {\n issues(\n orderBy: { field: UPDATED_AT, direction: DESC },\n filterBy: { createdBy: $user },\n first: $count,\n after: $cursor\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n nodes {\n number\n state\n title\n body\n updatedAt\n }\n }\n }\n}\n`;\n\nexport const enableAutoMergeMutation = `\nmutation EnablePullRequestAutoMerge(\n $pullRequestId: ID!,\n $mergeMethod: PullRequestMergeMethod!,\n $commitHeadline: String,\n $commitBody: String,\n) {\n enablePullRequestAutoMerge(\n input: {\n pullRequestId: $pullRequestId,\n mergeMethod: $mergeMethod,\n commitHeadline: $commitHeadline,\n commitBody: $commitBody,\n }\n ) {\n pullRequest {\n number\n }\n }\n}\n`;\n"],"mappings":";AAAA,MAAa,gBAAgB
|
|
1
|
+
{"version":3,"file":"graphql.js","names":[],"sources":["../../../../lib/modules/platform/github/graphql.ts"],"sourcesContent":["export const repoInfoQuery = `\nquery($owner: String!, $name: String!, $user: String) {\n repository(owner: $owner, name: $name) {\n id\n sshUrl\n isFork\n parent {\n nameWithOwner\n }\n isArchived\n nameWithOwner\n hasIssuesEnabled\n hasVulnerabilityAlertsEnabled\n autoMergeAllowed\n mergeCommitAllowed\n rebaseMergeAllowed\n squashMergeAllowed\n mergeQueue { id }\n defaultBranchRef {\n name\n target {\n oid\n }\n }\n issues(\n orderBy: { field: UPDATED_AT, direction: DESC },\n filterBy: { createdBy: $user },\n first: 5\n ) {\n nodes {\n number\n state\n title\n body\n updatedAt\n }\n }\n }\n}\n`;\n\nexport const getIssuesQuery = `\nquery(\n $owner: String!,\n $name: String!,\n $user: String,\n $count: Int,\n $cursor: String\n) {\n repository(owner: $owner, name: $name) {\n issues(\n orderBy: { field: UPDATED_AT, direction: DESC },\n filterBy: { createdBy: $user },\n first: $count,\n after: $cursor\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n nodes {\n number\n state\n title\n body\n updatedAt\n }\n }\n }\n}\n`;\n\nexport const repoMergeQueueQuery = `\nquery($owner: String!, $name: String!, $branch: String!) {\n repository(owner: $owner, name: $name) {\n mergeQueue(branch: $branch) {\n id\n }\n }\n}\n`;\n\nexport const prIsInMergeQueueQuery = `\nquery($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n isInMergeQueue\n }\n }\n}\n`;\n\nexport const enableAutoMergeMutation = `\nmutation EnablePullRequestAutoMerge(\n $pullRequestId: ID!,\n $mergeMethod: PullRequestMergeMethod!,\n $commitHeadline: String,\n $commitBody: String,\n) {\n enablePullRequestAutoMerge(\n input: {\n pullRequestId: $pullRequestId,\n mergeMethod: $mergeMethod,\n commitHeadline: $commitHeadline,\n commitBody: $commitBody,\n }\n ) {\n pullRequest {\n number\n }\n }\n}\n`;\n"],"mappings":";AAAA,MAAa,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyC7B,MAAa,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+B9B,MAAa,sBAAsB;;;;;;;;;AAUnC,MAAa,wBAAwB;;;;;;;;;AAUrC,MAAa,0BAA0B"}
|