Compare commits

..

1 Commits

Author SHA1 Message Date
Saw-jan
b2e5fd9a78 test: add hook failures to the test failures list
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
2026-01-05 16:00:43 +05:45
249 changed files with 1349 additions and 3491 deletions

View File

@@ -15,16 +15,16 @@ OPEN_SEARCH = "opensearchproject/opensearch:2"
INBUCKET_INBUCKET = "inbucket/inbucket" INBUCKET_INBUCKET = "inbucket/inbucket"
MINIO_MC = "minio/mc:RELEASE.2021-10-07T04-19-58Z" MINIO_MC = "minio/mc:RELEASE.2021-10-07T04-19-58Z"
OC_CI_ALPINE = "owncloudci/alpine:latest" OC_CI_ALPINE = "owncloudci/alpine:latest"
OC_CI_BAZEL_BUILDIFIER = "scharfvi/bazel-buildifier:latest" OC_CI_BAZEL_BUILDIFIER = "owncloudci/bazel-buildifier:latest"
OC_CI_CLAMAVD = "scharfvi/clamav:latest" OC_CI_CLAMAVD = "owncloudci/clamavd"
OC_CI_DRONE_ANSIBLE = "owncloudci/drone-ansible:latest" OC_CI_DRONE_ANSIBLE = "owncloudci/drone-ansible:latest"
OC_CI_GOLANG = "quay.io/opencloudeu/golang-ci:1.25" OC_CI_GOLANG = "registry.heinlein.group/opencloud/golang-ci:1.25"
OC_CI_NODEJS = "scharfvi/nodeci:24" OC_CI_NODEJS = "owncloudci/nodejs:%s"
OC_CI_NODEJS_ALPINE = "scharfvi/nodeci-alpine:24" OC_CI_PHP = "owncloudci/php:%s"
OC_CI_PHP = "scharfvi/php-alpine-ci:%s" OC_CI_WAIT_FOR = "owncloudci/wait-for:latest"
OC_CI_WAIT_FOR = "scharfvi/wait-for:latest"
OC_CS3_API_VALIDATOR = "opencloudeu/cs3api-validator:latest" OC_CS3_API_VALIDATOR = "opencloudeu/cs3api-validator:latest"
OC_LITMUS = "owncloudci/litmus:latest" OC_LITMUS = "owncloudci/litmus:latest"
OC_UBUNTU = "owncloud/ubuntu:20.04"
ONLYOFFICE_DOCUMENT_SERVER = "onlyoffice/documentserver:7.5.1" ONLYOFFICE_DOCUMENT_SERVER = "onlyoffice/documentserver:7.5.1"
PLUGINS_DOCKER_BUILDX = "woodpeckerci/plugin-docker-buildx:latest" PLUGINS_DOCKER_BUILDX = "woodpeckerci/plugin-docker-buildx:latest"
PLUGINS_NOTATION = "registry.heinlein.group/opencloud/notation-wp-plugin:latest" PLUGINS_NOTATION = "registry.heinlein.group/opencloud/notation-wp-plugin:latest"
@@ -37,7 +37,8 @@ REDIS = "redis:6-alpine"
READY_RELEASE_GO = "woodpeckerci/plugin-ready-release-go:latest" READY_RELEASE_GO = "woodpeckerci/plugin-ready-release-go:latest"
OPENLDAP = "bitnamilegacy/openldap:2.6" OPENLDAP = "bitnamilegacy/openldap:2.6"
DEFAULT_PHP_VERSION = "8.4" DEFAULT_PHP_VERSION = "8.2"
DEFAULT_NODEJS_VERSION = "20"
CACHE_S3_SERVER = "https://s3.ci.opencloud.eu" CACHE_S3_SERVER = "https://s3.ci.opencloud.eu"
@@ -453,16 +454,7 @@ CI_HTTP_PROXY_ENV = {
}, },
} }
def prefixStepCommands(pipeline, commands = [], skip_steps = []):
default_skip_steps = ["evaluate-previous-run"]
skip_steps = default_skip_steps + skip_steps
for step in pipeline["steps"]:
if "commands" in step.keys() and step["name"] not in skip_steps:
step["commands"] = commands + step["commands"]
def pipelineDependsOn(pipeline, dependant_pipelines): def pipelineDependsOn(pipeline, dependant_pipelines):
if type(pipeline) == "list":
pipeline = pipeline[0]
if "depends_on" in pipeline.keys(): if "depends_on" in pipeline.keys():
pipeline["depends_on"] = pipeline["depends_on"] + getPipelineNames(dependant_pipelines) pipeline["depends_on"] = pipeline["depends_on"] + getPipelineNames(dependant_pipelines)
else: else:
@@ -505,7 +497,7 @@ def main(ctx):
is_release_pr = (ctx.build.event == "pull_request" and ctx.build.sender == "openclouders" and "🎉 release" in ctx.build.title.lower()) is_release_pr = (ctx.build.event == "pull_request" and ctx.build.sender == "openclouders" and "🎉 release" in ctx.build.title.lower())
if is_release_pr: if is_release_pr:
return licenseCheck(ctx) return [licenseCheck(ctx)]
build_release_helpers = \ build_release_helpers = \
readyReleaseGo() readyReleaseGo()
@@ -521,10 +513,10 @@ def main(ctx):
codestyle(ctx) + \ codestyle(ctx) + \
checkGherkinLint(ctx) + \ checkGherkinLint(ctx) + \
checkTestSuitesInExpectedFailures(ctx) + \ checkTestSuitesInExpectedFailures(ctx) + \
pipelinesDependsOn(buildWebCache(ctx), savePipelineNumber(ctx)) + \ buildWebCache(ctx) + \
pipelinesDependsOn(cacheBrowsers(ctx), savePipelineNumber(ctx)) + \ cacheBrowsers(ctx) + \
getGoBinForTesting(ctx) + \ getGoBinForTesting(ctx) + \
pipelinesDependsOn(buildOpencloudBinaryForTesting(ctx), savePipelineNumber(ctx)) + \ buildOpencloudBinaryForTesting(ctx) + \
checkStarlark(ctx) + \ checkStarlark(ctx) + \
build_release_helpers + \ build_release_helpers + \
testOpencloudAndUploadResults(ctx) + \ testOpencloudAndUploadResults(ctx) + \
@@ -569,56 +561,14 @@ def main(ctx):
), ),
) )
test_pipelines.append(
pipelineDependsOn(
purgePipelineInfoCache(),
testPipelines(ctx),
),
)
pipelines = test_pipelines + build_release_pipelines + notifyMatrix(ctx) pipelines = test_pipelines + build_release_pipelines + notifyMatrix(ctx)
pipelineSanityChecks(pipelines) pipelineSanityChecks(pipelines)
return savePipelineNumber(ctx) + pipelines return pipelines
def savePipelineNumber(ctx):
base_url = "https://raw.githubusercontent.com/%s" % repo_slug
script_link = "%s/%s/tests/config/woodpecker/upload_pipeline_info.sh" % (base_url, ctx.build.commit)
return [{
"name": "save-pipeline-info",
"skip_clone": True,
"steps": [{
"name": "upload-info",
"image": MINIO_MC,
"environment": MINIO_MC_ENV,
"commands": [
"curl -s -o upload_pipeline_info.sh %s" % script_link,
"bash -x upload_pipeline_info.sh",
],
}],
"when": [
{
"event": ["push", "manual"],
"branch": ["main", "stable-*"],
},
event["tag"],
event["cron"],
event["pull_request"],
],
}]
def evaluateWorkflowStep():
return [{
"name": "evaluate-previous-run",
"image": OC_CI_NODEJS_ALPINE,
"commands": [
"node tests/config/woodpecker/evaluate_pipeline.js",
],
}]
def cachePipeline(ctx, name, steps): def cachePipeline(ctx, name, steps):
return { return {
"name": "cache-%s" % name, "name": "build-%s-cache" % name,
"steps": steps, "steps": steps,
"when": [ "when": [
{ {
@@ -642,7 +592,7 @@ def buildWebCache(ctx):
] ]
def testOpencloudAndUploadResults(ctx): def testOpencloudAndUploadResults(ctx):
unit_pipeline = testOpencloud(ctx) pipeline = testOpencloud(ctx)
###################################################################### ######################################################################
# The triggers have been disabled for now, since the govulncheck can # # The triggers have been disabled for now, since the govulncheck can #
@@ -652,8 +602,8 @@ def testOpencloudAndUploadResults(ctx):
###################################################################### ######################################################################
#security_scan = scanOpencloud(ctx) #security_scan = scanOpencloud(ctx)
#return [security_scan] + unit_pipeline + [scan_result_upload] #return [security_scan, pipeline, scan_result_upload]
return unit_pipeline return [pipeline]
def testPipelines(ctx): def testPipelines(ctx):
pipelines = [] pipelines = []
@@ -666,10 +616,10 @@ def testPipelines(ctx):
storage = "decomposed" storage = "decomposed"
if "skip" not in config["cs3ApiTests"] or not config["cs3ApiTests"]["skip"]: if "skip" not in config["cs3ApiTests"] or not config["cs3ApiTests"]["skip"]:
pipelines += cs3ApiTests(ctx, storage, "default") pipelines.append(cs3ApiTests(ctx, storage, "default"))
if "skip" not in config["wopiValidatorTests"] or not config["wopiValidatorTests"]["skip"]: if "skip" not in config["wopiValidatorTests"] or not config["wopiValidatorTests"]["skip"]:
pipelines += wopiValidatorTests(ctx, storage, "builtin", "default") pipelines.append(wopiValidatorTests(ctx, storage, "builtin", "default"))
pipelines += wopiValidatorTests(ctx, storage, "cs3", "default") pipelines.append(wopiValidatorTests(ctx, storage, "cs3", "default"))
pipelines += localApiTestPipeline(ctx) pipelines += localApiTestPipeline(ctx)
pipelines += coreApiTestPipeline(ctx) pipelines += coreApiTestPipeline(ctx)
@@ -677,7 +627,7 @@ def testPipelines(ctx):
pipelines += multiServiceE2ePipeline(ctx) pipelines += multiServiceE2ePipeline(ctx)
if ("skip" not in config["k6LoadTests"] or not config["k6LoadTests"]["skip"]) and ("k6-test" in ctx.build.title.lower() or ctx.build.event == "cron"): if ("skip" not in config["k6LoadTests"] or not config["k6LoadTests"]["skip"]) and ("k6-test" in ctx.build.title.lower() or ctx.build.event == "cron"):
pipelines += pipelineDependsOn(k6LoadTests(ctx), savePipelineNumber(ctx)) pipelines += k6LoadTests(ctx)
return pipelines return pipelines
@@ -727,7 +677,7 @@ def cacheGoBin():
}, },
{ {
"name": "archive-go-bin", "name": "archive-go-bin",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"commands": [ "commands": [
". ./.env", ". ./.env",
"if $BIN_CACHE_FOUND; then exit 0; fi", "if $BIN_CACHE_FOUND; then exit 0; fi",
@@ -765,7 +715,7 @@ def restoreGoBinCache():
}, },
{ {
"name": "extract-go-bin-cache", "name": "extract-go-bin-cache",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"commands": [ "commands": [
"tar -xvmf %s -C /" % dirs["gobinTarPath"], "tar -xvmf %s -C /" % dirs["gobinTarPath"],
], ],
@@ -773,7 +723,7 @@ def restoreGoBinCache():
] ]
def testOpencloud(ctx): def testOpencloud(ctx):
steps = evaluateWorkflowStep() + restoreGoBinCache() + makeGoGenerate("") + [ steps = restoreGoBinCache() + makeGoGenerate("") + [
{ {
"name": "golangci-lint", "name": "golangci-lint",
"image": OC_CI_GOLANG, "image": OC_CI_GOLANG,
@@ -839,8 +789,8 @@ def testOpencloud(ctx):
}, },
] ]
pipeline = { return {
"name": "test-lint-unit", "name": "linting_and_unitTests",
"steps": steps, "steps": steps,
"when": [ "when": [
event["base"], event["base"],
@@ -856,12 +806,6 @@ def testOpencloud(ctx):
"workspace": workspace, "workspace": workspace,
} }
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
return [pipeline]
def scanOpencloud(ctx): def scanOpencloud(ctx):
steps = restoreGoBinCache() + makeGoGenerate("") + [ steps = restoreGoBinCache() + makeGoGenerate("") + [
{ {
@@ -893,7 +837,7 @@ def scanOpencloud(ctx):
def buildOpencloudBinaryForTesting(ctx): def buildOpencloudBinaryForTesting(ctx):
return [{ return [{
"name": "build-opencloud-for-testing", "name": "build_opencloud_binary_for_testing",
"steps": makeNodeGenerate("") + "steps": makeNodeGenerate("") +
makeGoGenerate("") + makeGoGenerate("") +
build() + build() +
@@ -965,7 +909,7 @@ def checkGherkinLint(ctx):
"steps": [ "steps": [
{ {
"name": "lint-feature-files", "name": "lint-feature-files",
"image": OC_CI_NODEJS_ALPINE, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": [ "commands": [
"npm install -g @gherlint/gherlint@1.1.0", "npm install -g @gherlint/gherlint@1.1.0",
"make test-gherkin-lint", "make test-gherkin-lint",
@@ -1058,10 +1002,9 @@ def codestyle(ctx):
return pipelines return pipelines
def cs3ApiTests(ctx, storage, accounts_hash_difficulty = 4): def cs3ApiTests(ctx, storage, accounts_hash_difficulty = 4):
pipeline = { return {
"name": "test-cs3-API-%s" % storage, "name": "cs3ApiTests-%s" % storage,
"steps": evaluateWorkflowStep() + "steps": restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
opencloudServer(storage, accounts_hash_difficulty, deploy_type = "cs3api_validator") + opencloudServer(storage, accounts_hash_difficulty, deploy_type = "cs3api_validator") +
[ [
{ {
@@ -1087,11 +1030,6 @@ def cs3ApiTests(ctx, storage, accounts_hash_difficulty = 4):
}, },
], ],
} }
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
return [pipeline]
def wopiValidatorTests(ctx, storage, wopiServerType, accounts_hash_difficulty = 4): def wopiValidatorTests(ctx, storage, wopiServerType, accounts_hash_difficulty = 4):
testgroups = [ testgroups = [
@@ -1165,11 +1103,10 @@ def wopiValidatorTests(ctx, storage, wopiServerType, accounts_hash_difficulty =
], ],
}) })
pipeline = { return {
"name": "test-wopi-validator-%s-%s" % (wopiServerType, storage), "name": "wopiValidatorTests-%s-%s" % (wopiServerType, storage),
"services": fakeOffice(), "services": fakeOffice(),
"steps": evaluateWorkflowStep() + "steps": restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
waitForServices("fake-office", ["fakeoffice:8080"]) + waitForServices("fake-office", ["fakeoffice:8080"]) +
opencloudServer(storage, accounts_hash_difficulty, deploy_type = "wopi_validator", extra_server_environment = extra_server_environment) + opencloudServer(storage, accounts_hash_difficulty, deploy_type = "wopi_validator", extra_server_environment = extra_server_environment) +
wopiServer + wopiServer +
@@ -1207,11 +1144,6 @@ def wopiValidatorTests(ctx, storage, wopiServerType, accounts_hash_difficulty =
}, },
], ],
} }
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
return [pipeline]
def localApiTestPipeline(ctx): def localApiTestPipeline(ctx):
pipelines = [] pipelines = []
@@ -1256,9 +1188,9 @@ def localApiTestPipeline(ctx):
for storage in params["storages"]: for storage in params["storages"]:
for run_with_remote_php in params["withRemotePhp"]: for run_with_remote_php in params["withRemotePhp"]:
for run_with_watch_fs_enabled in params["enableWatchFs"]: for run_with_watch_fs_enabled in params["enableWatchFs"]:
pipeline_name = "test-API" pipeline_name = "API"
if name.startswith("cli"): if name.startswith("cli"):
pipeline_name = "test-CLI" pipeline_name = "CLI"
pipeline_name += "-%s" % name pipeline_name += "-%s" % name
if not run_with_remote_php: if not run_with_remote_php:
pipeline_name += "-withoutRemotePhp" pipeline_name += "-withoutRemotePhp"
@@ -1268,7 +1200,7 @@ def localApiTestPipeline(ctx):
pipeline = { pipeline = {
"name": pipeline_name, "name": pipeline_name,
"steps": evaluateWorkflowStep() + restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) + "steps": restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
(tikaService() if params["tikaNeeded"] else []) + (tikaService() if params["tikaNeeded"] else []) +
(waitForServices("online-offices", ["collabora:9980", "onlyoffice:443", "fakeoffice:8080"]) if params["collaborationServiceNeeded"] else []) + (waitForServices("online-offices", ["collabora:9980", "onlyoffice:443", "fakeoffice:8080"]) if params["collaborationServiceNeeded"] else []) +
(waitForClamavService() if params["antivirusNeeded"] else []) + (waitForClamavService() if params["antivirusNeeded"] else []) +
@@ -1303,10 +1235,6 @@ def localApiTestPipeline(ctx):
}, },
], ],
} }
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
pipelines.append(pipeline) pipelines.append(pipeline)
return pipelines return pipelines
@@ -1391,7 +1319,7 @@ def coreApiTestPipeline(ctx):
for run_with_remote_php in params["withRemotePhp"]: for run_with_remote_php in params["withRemotePhp"]:
for run_with_watch_fs_enabled in params["enableWatchFs"]: for run_with_watch_fs_enabled in params["enableWatchFs"]:
if not debugPartsEnabled or (debugPartsEnabled and runPart in debugParts): if not debugPartsEnabled or (debugPartsEnabled and runPart in debugParts):
pipeline_name = "test-Core-API-%s" % runPart pipeline_name = "Core-API-%s" % runPart
if not run_with_remote_php: if not run_with_remote_php:
pipeline_name += "-withoutRemotePhp" pipeline_name += "-withoutRemotePhp"
pipeline_name += "-%s" % storage pipeline_name += "-%s" % storage
@@ -1400,8 +1328,7 @@ def coreApiTestPipeline(ctx):
pipeline = { pipeline = {
"name": pipeline_name, "name": pipeline_name,
"steps": evaluateWorkflowStep() + "steps": restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
opencloudServer( opencloudServer(
storage, storage,
params["accounts_hash_difficulty"], params["accounts_hash_difficulty"],
@@ -1428,15 +1355,11 @@ def coreApiTestPipeline(ctx):
}, },
], ],
} }
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
pipelines.append(pipeline) pipelines.append(pipeline)
return pipelines return pipelines
def coreApiTest(part_number = 1, number_of_parts = 1, with_remote_php = False, storage = "posix"): def coreApiTest(part_number = 1, number_of_parts = 1, with_remote_php = False, storage = "posix"):
filter_tags = "~@skipOnOpencloud-%s-Storage" % storage filterTags = "~@skipOnOpencloud-%s-Storage" % storage
test_dir = "%s/tests/acceptance" % dirs["base"] test_dir = "%s/tests/acceptance" % dirs["base"]
expected_failures_file = "%s/expected-failures-API-on-%s-storage.md" % (test_dir, storage) expected_failures_file = "%s/expected-failures-API-on-%s-storage.md" % (test_dir, storage)
@@ -1448,7 +1371,7 @@ def coreApiTest(part_number = 1, number_of_parts = 1, with_remote_php = False, s
"OC_REVA_DATA_ROOT": "%s" % (dirs["opencloudRevaDataRoot"] if storage == "owncloud" else ""), "OC_REVA_DATA_ROOT": "%s" % (dirs["opencloudRevaDataRoot"] if storage == "owncloud" else ""),
"SEND_SCENARIO_LINE_REFERENCES": True, "SEND_SCENARIO_LINE_REFERENCES": True,
"STORAGE_DRIVER": storage, "STORAGE_DRIVER": storage,
"BEHAT_FILTER_TAGS": filter_tags, "BEHAT_FILTER_TAGS": filterTags,
"DIVIDE_INTO_NUM_PARTS": number_of_parts, "DIVIDE_INTO_NUM_PARTS": number_of_parts,
"RUN_PART": part_number, "RUN_PART": part_number,
"ACCEPTANCE_TEST_TYPE": "core-api", "ACCEPTANCE_TEST_TYPE": "core-api",
@@ -1536,7 +1459,6 @@ def e2eTestPipeline(ctx):
for storage in params["storages"]: for storage in params["storages"]:
for watch_fs_enabled in params["enableWatchFs"]: for watch_fs_enabled in params["enableWatchFs"]:
steps_before = \ steps_before = \
evaluateWorkflowStep() + \
restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBin"]) + \ restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBin"]) + \
restoreWebCache() + \ restoreWebCache() + \
restoreWebPnpmCache() + \ restoreWebPnpmCache() + \
@@ -1551,7 +1473,7 @@ def e2eTestPipeline(ctx):
step_e2e = { step_e2e = {
"name": "e2e-tests", "name": "e2e-tests",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"environment": { "environment": {
"OC_BASE_URL": OC_DOMAIN, "OC_BASE_URL": OC_DOMAIN,
"HEADLESS": True, "HEADLESS": True,
@@ -1578,30 +1500,20 @@ def e2eTestPipeline(ctx):
"cd %s/tests/e2e" % dirs["web"], "cd %s/tests/e2e" % dirs["web"],
"bash run-e2e.sh %s --run-part %d" % (e2e_args, run_part), "bash run-e2e.sh %s --run-part %d" % (e2e_args, run_part),
] ]
pipeline = { pipelines.append({
"name": "test-e2e-%s-%s-%s%s" % (name, run_part, storage, "-watchfs" if watch_fs_enabled else ""), "name": "e2e-tests-%s-%s-%s%s" % (name, run_part, storage, "-watchfs" if watch_fs_enabled else ""),
"steps": steps_before + [run_e2e] + steps_after, "steps": steps_before + [run_e2e] + steps_after,
"depends_on": getPipelineNames(buildOpencloudBinaryForTesting(ctx) + buildWebCache(ctx)), "depends_on": getPipelineNames(buildOpencloudBinaryForTesting(ctx) + buildWebCache(ctx)),
"when": e2e_trigger, "when": e2e_trigger,
} })
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
pipelines.append(pipeline)
else: else:
step_e2e["commands"].append("bash run-e2e.sh %s" % e2e_args) step_e2e["commands"].append("bash run-e2e.sh %s" % e2e_args)
pipeline = { pipelines.append({
"name": "test-e2e-%s-%s%s" % (name, storage, "-watchfs" if watch_fs_enabled else ""), "name": "e2e-tests-%s-%s%s" % (name, storage, "-watchfs" if watch_fs_enabled else ""),
"steps": steps_before + [step_e2e] + steps_after, "steps": steps_before + [step_e2e] + steps_after,
"depends_on": getPipelineNames(buildOpencloudBinaryForTesting(ctx) + buildWebCache(ctx)), "depends_on": getPipelineNames(buildOpencloudBinaryForTesting(ctx) + buildWebCache(ctx)),
"when": e2e_trigger, "when": e2e_trigger,
} })
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
pipelines.append(pipeline)
return pipelines return pipelines
def multiServiceE2ePipeline(ctx): def multiServiceE2ePipeline(ctx):
@@ -1716,7 +1628,6 @@ def multiServiceE2ePipeline(ctx):
extra_server_environment["STORAGE_USERS_POSIX_WATCH_FS"] = True extra_server_environment["STORAGE_USERS_POSIX_WATCH_FS"] = True
steps = \ steps = \
evaluateWorkflowStep() + \
restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBin"]) + \ restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBin"]) + \
restoreWebCache() + \ restoreWebCache() + \
restoreWebPnpmCache() + \ restoreWebPnpmCache() + \
@@ -1726,7 +1637,7 @@ def multiServiceE2ePipeline(ctx):
storage_users_services + \ storage_users_services + \
[{ [{
"name": "e2e-tests", "name": "e2e-tests",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"environment": { "environment": {
"OC_BASE_URL": OC_DOMAIN, "OC_BASE_URL": OC_DOMAIN,
"HEADLESS": True, "HEADLESS": True,
@@ -1742,17 +1653,12 @@ def multiServiceE2ePipeline(ctx):
}] + \ }] + \
uploadTracingResult(ctx) uploadTracingResult(ctx)
pipeline = { pipelines.append({
"name": "e2e-tests-multi-service%s" % ("-watchfs" if watch_fs_enabled else ""), "name": "e2e-tests-multi-service%s" % ("-watchfs" if watch_fs_enabled else ""),
"steps": steps, "steps": steps,
"depends_on": getPipelineNames(buildOpencloudBinaryForTesting(ctx) + buildWebCache(ctx)), "depends_on": getPipelineNames(buildOpencloudBinaryForTesting(ctx) + buildWebCache(ctx)),
"when": e2e_trigger, "when": e2e_trigger,
} })
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
pipelines.append(pipeline)
return pipelines return pipelines
def uploadTracingResult(ctx): def uploadTracingResult(ctx):
@@ -2053,19 +1959,19 @@ def binaryRelease(ctx, arch, depends_on = []):
} }
def licenseCheck(ctx): def licenseCheck(ctx):
return [{ return {
"name": "check-licenses", "name": "check-licenses",
"steps": restoreGoBinCache() + [ "steps": restoreGoBinCache() + [
{ {
"name": "node-check-licenses", "name": "node-check-licenses",
"image": OC_CI_NODEJS_ALPINE, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": [ "commands": [
"make ci-node-check-licenses", "make ci-node-check-licenses",
], ],
}, },
{ {
"name": "node-save-licenses", "name": "node-save-licenses",
"image": OC_CI_NODEJS_ALPINE, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": [ "commands": [
"make ci-node-save-licenses", "make ci-node-save-licenses",
], ],
@@ -2117,7 +2023,7 @@ def licenseCheck(ctx):
event["tag"], event["tag"],
], ],
"workspace": workspace, "workspace": workspace,
}] }
def readyReleaseGo(): def readyReleaseGo():
return [{ return [{
@@ -2185,7 +2091,7 @@ def makeNodeGenerate(module):
return [ return [
{ {
"name": "generate nodejs", "name": "generate nodejs",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"environment": { "environment": {
"CHROMEDRIVER_SKIP_DOWNLOAD": True, # install fails on arm and chromedriver is a test only dependency "CHROMEDRIVER_SKIP_DOWNLOAD": True, # install fails on arm and chromedriver is a test only dependency
}, },
@@ -2379,9 +2285,9 @@ def opencloudServer(storage = "decomposed", accounts_hash_difficulty = 4, depend
"%s/bin/ocwrapper serve --bin %s --url %s --admin-username admin --admin-password admin" % (dirs["ocWrapper"], dirs["opencloudBin"], environment["OC_URL"]), "%s/bin/ocwrapper serve --bin %s --url %s --admin-username admin --admin-password admin" % (dirs["ocWrapper"], dirs["opencloudBin"], environment["OC_URL"]),
] ]
else: else:
server_commands.append( server_commands += [
"%s server" % dirs["opencloudBin"], "%s server" % dirs["opencloudBin"],
) ]
wait_for_opencloud = { wait_for_opencloud = {
"name": "wait-for-%s" % container_name, "name": "wait-for-%s" % container_name,
@@ -2687,9 +2593,6 @@ def purgeOpencloudWebBuildCache(ctx):
def purgeGoBinCache(ctx): def purgeGoBinCache(ctx):
return purgeCache("purge_go_bin_cache", "dev/opencloud/go-bin", 14) return purgeCache("purge_go_bin_cache", "dev/opencloud/go-bin", 14)
def purgePipelineInfoCache():
return purgeCache("purge_pipeline_info_cache", "public/opencloud/pipelines", 14)
def pipelineSanityChecks(pipelines): def pipelineSanityChecks(pipelines):
"""pipelineSanityChecks helps the CI developers to find errors before running it """pipelineSanityChecks helps the CI developers to find errors before running it
@@ -2757,8 +2660,10 @@ def pipelineSanityChecks(pipelines):
print(" %sx\t%s" % (images[image], image)) print(" %sx\t%s" % (images[image], image))
def litmus(ctx, storage): def litmus(ctx, storage):
pipelines = []
if not config["litmus"]: if not config["litmus"]:
return [] return pipelines
environment = { environment = {
"LITMUS_PASSWORD": "admin", "LITMUS_PASSWORD": "admin",
@@ -2766,12 +2671,11 @@ def litmus(ctx, storage):
"TESTS": "basic copymove props http", "TESTS": "basic copymove props http",
} }
litmus_command = "/usr/local/bin/litmus-wrapper" litmusCommand = "/usr/local/bin/litmus-wrapper"
pipeline = { result = {
"name": "test-litmus", "name": "litmus",
"steps": evaluateWorkflowStep() + "steps": restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
restoreBuildArtifactCache(ctx, dirs["opencloudBinArtifact"], dirs["opencloudBinPath"]) +
opencloudServer(storage) + opencloudServer(storage) +
setupForLitmus() + setupForLitmus() +
[ [
@@ -2782,7 +2686,7 @@ def litmus(ctx, storage):
"commands": [ "commands": [
"source .env", "source .env",
'export LITMUS_URL="%s/remote.php/webdav"' % OC_URL, 'export LITMUS_URL="%s/remote.php/webdav"' % OC_URL,
litmus_command, litmusCommand,
], ],
}, },
{ {
@@ -2792,7 +2696,7 @@ def litmus(ctx, storage):
"commands": [ "commands": [
"source .env", "source .env",
'export LITMUS_URL="%s/remote.php/dav/files/admin"' % OC_URL, 'export LITMUS_URL="%s/remote.php/dav/files/admin"' % OC_URL,
litmus_command, litmusCommand,
], ],
}, },
{ {
@@ -2802,7 +2706,7 @@ def litmus(ctx, storage):
"commands": [ "commands": [
"source .env", "source .env",
'export LITMUS_URL="%s/remote.php/dav/files/admin/Shares/new_folder/"' % OC_URL, 'export LITMUS_URL="%s/remote.php/dav/files/admin/Shares/new_folder/"' % OC_URL,
litmus_command, litmusCommand,
], ],
}, },
{ {
@@ -2812,7 +2716,7 @@ def litmus(ctx, storage):
"commands": [ "commands": [
"source .env", "source .env",
'export LITMUS_URL="%s/remote.php/webdav/Shares/new_folder/"' % OC_URL, 'export LITMUS_URL="%s/remote.php/webdav/Shares/new_folder/"' % OC_URL,
litmus_command, litmusCommand,
], ],
}, },
# { # {
@@ -2826,7 +2730,7 @@ def litmus(ctx, storage):
# "commands": [ # "commands": [
# "source .env", # "source .env",
# "export LITMUS_URL='%s/remote.php/dav/public-files/'$PUBLIC_TOKEN" % OCIS_URL, # "export LITMUS_URL='%s/remote.php/dav/public-files/'$PUBLIC_TOKEN" % OCIS_URL,
# litmus_command, # litmusCommand,
# ], # ],
# }, # },
{ {
@@ -2836,7 +2740,7 @@ def litmus(ctx, storage):
"commands": [ "commands": [
"source .env", "source .env",
"export LITMUS_URL='%s/remote.php/dav/spaces/'$SPACE_ID" % OC_URL, "export LITMUS_URL='%s/remote.php/dav/spaces/'$SPACE_ID" % OC_URL,
litmus_command, litmusCommand,
], ],
}, },
], ],
@@ -2853,17 +2757,14 @@ def litmus(ctx, storage):
}, },
], ],
} }
pipelines.append(result)
prefixStepCommands(pipeline, [ return pipelines
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
return [pipeline]
def setupForLitmus(): def setupForLitmus():
return [{ return [{
"name": "setup-for-litmus", "name": "setup-for-litmus",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"environment": { "environment": {
"TEST_SERVER_URL": OC_URL, "TEST_SERVER_URL": OC_URL,
}, },
@@ -2878,7 +2779,7 @@ def getWoodpeckerEnvAndCheckScript(ctx):
path_to_check_script = "%s/tests/config/woodpecker/check_web_cache.sh" % dirs["base"] path_to_check_script = "%s/tests/config/woodpecker/check_web_cache.sh" % dirs["base"]
return { return {
"name": "get-woodpecker-env-and-check-script", "name": "get-woodpecker-env-and-check-script",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"commands": [ "commands": [
"cp %s check_web_cache.sh" % path_to_check_script, "cp %s check_web_cache.sh" % path_to_check_script,
], ],
@@ -2897,7 +2798,7 @@ def checkForWebCache(name):
def cloneWeb(): def cloneWeb():
return { return {
"name": "clone-web", "name": "clone-web",
"image": OC_CI_NODEJS_ALPINE, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": [ "commands": [
". ./.woodpecker.env", ". ./.woodpecker.env",
"if $WEB_CACHE_FOUND; then exit 0; fi", "if $WEB_CACHE_FOUND; then exit 0; fi",
@@ -2914,7 +2815,7 @@ def generateWebPnpmCache(ctx):
cloneWeb(), cloneWeb(),
{ {
"name": "install-pnpm", "name": "install-pnpm",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": [ "commands": [
". ./.woodpecker.env", ". ./.woodpecker.env",
"if $WEB_CACHE_FOUND; then exit 0; fi", "if $WEB_CACHE_FOUND; then exit 0; fi",
@@ -2926,7 +2827,7 @@ def generateWebPnpmCache(ctx):
}, },
{ {
"name": "zip-pnpm", "name": "zip-pnpm",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": [ "commands": [
". ./.woodpecker.env", ". ./.woodpecker.env",
"if $WEB_CACHE_FOUND; then exit 0; fi", "if $WEB_CACHE_FOUND; then exit 0; fi",
@@ -2988,7 +2889,7 @@ def cacheBrowsers(ctx):
browser_cache_steps = [ browser_cache_steps = [
{ {
"name": "install-browsers", "name": "install-browsers",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"environment": { "environment": {
"PLAYWRIGHT_BROWSERS_PATH": ".playwright", "PLAYWRIGHT_BROWSERS_PATH": ".playwright",
}, },
@@ -2996,7 +2897,7 @@ def cacheBrowsers(ctx):
"cd %s" % dirs["web"], "cd %s" % dirs["web"],
". ./.woodpecker.env", ". ./.woodpecker.env",
"if $BROWSER_CACHE_FOUND; then exit 0; fi", "if $BROWSER_CACHE_FOUND; then exit 0; fi",
"pnpm exec playwright install", "pnpm exec playwright install --with-deps",
"pnpm exec playwright install --list", "pnpm exec playwright install --list",
"tar -czf %s .playwright" % dirs["playwrightBrowsersArchive"], "tar -czf %s .playwright" % dirs["playwrightBrowsersArchive"],
], ],
@@ -3031,7 +2932,7 @@ def generateWebCache(ctx):
cloneWeb(), cloneWeb(),
{ {
"name": "zip-web", "name": "zip-web",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"commands": [ "commands": [
". ./.woodpecker.env", ". ./.woodpecker.env",
"if $WEB_CACHE_FOUND; then exit 0; fi", "if $WEB_CACHE_FOUND; then exit 0; fi",
@@ -3067,7 +2968,7 @@ def restoreWebCache():
], ],
}, { }, {
"name": "unzip-web-cache", "name": "unzip-web-cache",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"commands": [ "commands": [
"tar -xf %s -C ." % dirs["webZip"], "tar -xf %s -C ." % dirs["webZip"],
], ],
@@ -3086,7 +2987,7 @@ def restoreWebPnpmCache(extra_commands = []):
}, { }, {
# we need to install again because the node_modules are not cached # we need to install again because the node_modules are not cached
"name": "unzip-and-install-pnpm", "name": "unzip-and-install-pnpm",
"image": OC_CI_NODEJS, "image": OC_CI_NODEJS % DEFAULT_NODEJS_VERSION,
"commands": extra_commands + [ "commands": extra_commands + [
"cd %s" % dirs["web"], "cd %s" % dirs["web"],
"rm -rf .pnpm-store", "rm -rf .pnpm-store",
@@ -3112,7 +3013,7 @@ def restoreBrowsersCache():
}, },
{ {
"name": "unzip-browsers-cache", "name": "unzip-browsers-cache",
"image": OC_CI_NODEJS, "image": OC_UBUNTU,
"commands": [ "commands": [
"tar -xf /woodpecker/src/github.com/%s/webTestRunner/playwright-browsers.tar.gz -C ." % repo_slug, "tar -xf /woodpecker/src/github.com/%s/webTestRunner/playwright-browsers.tar.gz -C ." % repo_slug,
], ],
@@ -3130,7 +3031,7 @@ def waitForEmailService():
"name": "wait-for-email", "name": "wait-for-email",
"image": OC_CI_WAIT_FOR, "image": OC_CI_WAIT_FOR,
"commands": [ "commands": [
"wait-for -host email -port 9000 -timeout 600", "wait-for -it email:9000 -t 600",
], ],
}] }]
@@ -3145,7 +3046,7 @@ def waitForClamavService():
"name": "wait-for-clamav", "name": "wait-for-clamav",
"image": OC_CI_WAIT_FOR, "image": OC_CI_WAIT_FOR,
"commands": [ "commands": [
"wait-for -host clamav -port 3310 -timeout 600", "wait-for -it clamav:3310 -t 600",
], ],
}] }]
@@ -3188,7 +3089,7 @@ def waitForLdapService():
"name": "wait-for-ldap", "name": "wait-for-ldap",
"image": OC_CI_WAIT_FOR, "image": OC_CI_WAIT_FOR,
"commands": [ "commands": [
"wait-for -host ldap-server -port 1636 -timeout 600", "wait-for -it ldap-server:1636 -t 600",
], ],
}] }]
@@ -3251,7 +3152,7 @@ def tikaService():
"name": "wait-for-tika-service", "name": "wait-for-tika-service",
"image": OC_CI_WAIT_FOR, "image": OC_CI_WAIT_FOR,
"commands": [ "commands": [
"wait-for -host tika -port 9998 -timeout 300", "wait-for -it tika:9998 -t 300",
], ],
}] }]
@@ -3310,10 +3211,10 @@ def k6LoadTests(ctx):
if "k6-test" in ctx.build.title.lower(): if "k6-test" in ctx.build.title.lower():
event_array.append("pull_request") event_array.append("pull_request")
pipeline = { return [{
"name": "test-k6-load", "name": "k6-load-test",
"skip_clone": True, "skip_clone": True,
"steps": evaluateWorkflowStep() + [ "steps": [
{ {
"name": "k6-load-test", "name": "k6-load-test",
"image": OC_CI_ALPINE, "image": OC_CI_ALPINE,
@@ -3358,26 +3259,16 @@ def k6LoadTests(ctx):
"event": event_array, "event": event_array,
}, },
], ],
} }]
prefixStepCommands(pipeline, [
". ./.woodpecker.env",
'[ "$SKIP_WORKFLOW" = "true" ] && exit 0',
])
return [pipeline]
def waitForServices(name, services = []): def waitForServices(name, services = []):
commands = [] services = ",".join(services)
for service in services:
host, port = service.split(":", 1)
commands.append(
"wait-for -host %s -port %s -timeout 300" % (host, port),
)
return [{ return [{
"name": "wait-for-%s" % name, "name": "wait-for-%s" % name,
"image": OC_CI_WAIT_FOR, "image": OC_CI_WAIT_FOR,
"commands": commands, "commands": [
"wait-for -it %s -t 300" % services,
],
}] }]
def openCloudHealthCheck(name, services = []): def openCloudHealthCheck(name, services = []):

View File

@@ -1,8 +1,8 @@
{ {
"name": "opencloud-eu/opencloud", "name": "opencloud-eu/opencloud",
"config": { "config" : {
"platform": { "platform": {
"php": "8.3" "php": "8.2"
}, },
"vendor-dir": "./vendor-php", "vendor-dir": "./vendor-php",
"allow-plugins": { "allow-plugins": {

20
go.mod
View File

@@ -47,7 +47,7 @@ require (
github.com/jellydator/ttlcache/v3 v3.4.0 github.com/jellydator/ttlcache/v3 v3.4.0
github.com/jinzhu/now v1.1.5 github.com/jinzhu/now v1.1.5
github.com/justinas/alice v1.2.0 github.com/justinas/alice v1.2.0
github.com/kovidgoyal/imaging v1.8.18 github.com/kovidgoyal/imaging v1.8.17
github.com/leonelquinteros/gotext v1.7.2 github.com/leonelquinteros/gotext v1.7.2
github.com/libregraph/idm v0.5.0 github.com/libregraph/idm v0.5.0
github.com/libregraph/lico v0.66.0 github.com/libregraph/lico v0.66.0
@@ -65,7 +65,7 @@ require (
github.com/opencloud-eu/icap-client v0.0.0-20250930132611-28a2afe62d89 github.com/opencloud-eu/icap-client v0.0.0-20250930132611-28a2afe62d89
github.com/opencloud-eu/libre-graph-api-go v1.0.8-0.20250724122329-41ba6b191e76 github.com/opencloud-eu/libre-graph-api-go v1.0.8-0.20250724122329-41ba6b191e76
github.com/opencloud-eu/reva/v2 v2.41.0 github.com/opencloud-eu/reva/v2 v2.41.0
github.com/opensearch-project/opensearch-go/v4 v4.6.0 github.com/opensearch-project/opensearch-go/v4 v4.5.0
github.com/orcaman/concurrent-map v1.0.0 github.com/orcaman/concurrent-map v1.0.0
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/pkg/xattr v0.4.12 github.com/pkg/xattr v0.4.12
@@ -97,21 +97,21 @@ require (
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0
go.opentelemetry.io/contrib/zpages v0.63.0 go.opentelemetry.io/contrib/zpages v0.63.0
go.opentelemetry.io/otel v1.39.0 go.opentelemetry.io/otel v1.38.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0
go.opentelemetry.io/otel/sdk v1.39.0 go.opentelemetry.io/otel/sdk v1.38.0
go.opentelemetry.io/otel/trace v1.39.0 go.opentelemetry.io/otel/trace v1.38.0
golang.org/x/crypto v0.46.0 golang.org/x/crypto v0.46.0
golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac
golang.org/x/image v0.34.0 golang.org/x/image v0.33.0
golang.org/x/net v0.48.0 golang.org/x/net v0.48.0
golang.org/x/oauth2 v0.33.0 golang.org/x/oauth2 v0.33.0
golang.org/x/sync v0.19.0 golang.org/x/sync v0.19.0
golang.org/x/term v0.38.0 golang.org/x/term v0.38.0
golang.org/x/text v0.32.0 golang.org/x/text v0.32.0
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8
google.golang.org/grpc v1.78.0 google.golang.org/grpc v1.77.0
google.golang.org/protobuf v1.36.10 google.golang.org/protobuf v1.36.10
gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
@@ -384,7 +384,7 @@ require (
go.opencensus.io v0.24.0 // indirect go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
go.opentelemetry.io/otel/metric v1.39.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.opentelemetry.io/proto/otlp v1.7.1 // indirect
go.uber.org/multierr v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect go.uber.org/zap v1.27.0 // indirect
@@ -395,7 +395,7 @@ require (
golang.org/x/time v0.14.0 // indirect golang.org/x/time v0.14.0 // indirect
golang.org/x/tools v0.39.0 // indirect golang.org/x/tools v0.39.0 // indirect
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect
gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect

44
go.sum
View File

@@ -745,8 +745,8 @@ github.com/kovidgoyal/go-parallel v1.1.1 h1:1OzpNjtrUkBPq3UaqrnvOoB2F9RttSt811ui
github.com/kovidgoyal/go-parallel v1.1.1/go.mod h1:BJNIbe6+hxyFWv7n6oEDPj3PA5qSw5OCtf0hcVxWJiw= github.com/kovidgoyal/go-parallel v1.1.1/go.mod h1:BJNIbe6+hxyFWv7n6oEDPj3PA5qSw5OCtf0hcVxWJiw=
github.com/kovidgoyal/go-shm v1.0.0 h1:HJEel9D1F9YhULvClEHJLawoRSj/1u/EDV7MJbBPgQo= github.com/kovidgoyal/go-shm v1.0.0 h1:HJEel9D1F9YhULvClEHJLawoRSj/1u/EDV7MJbBPgQo=
github.com/kovidgoyal/go-shm v1.0.0/go.mod h1:Yzb80Xf9L3kaoB2RGok9hHwMIt7Oif61kT6t3+VnZds= github.com/kovidgoyal/go-shm v1.0.0/go.mod h1:Yzb80Xf9L3kaoB2RGok9hHwMIt7Oif61kT6t3+VnZds=
github.com/kovidgoyal/imaging v1.8.18 h1:42JCqJnQBzBo0hGllLEJVYDARWXPP9MT3HgiTno9Chc= github.com/kovidgoyal/imaging v1.8.17 h1:IDc7lbN2Qrn8s50y7Zt355HhOc+jUpvsScYAaGCW8vs=
github.com/kovidgoyal/imaging v1.8.18/go.mod h1:bqjHpeAxSuTLvKob6HuqAr9td2wP9G54Snbgd+1QLoU= github.com/kovidgoyal/imaging v1.8.17/go.mod h1:uD4XKN42lLV9du0TsPkwi53yw23vz/qDmfpiDWCSUCE=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -973,8 +973,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
github.com/opensearch-project/opensearch-go/v4 v4.6.0 h1:Ac8aLtDSmLEyOmv0r1qhQLw3b4vcUhE42NE9k+Z4cRc= github.com/opensearch-project/opensearch-go/v4 v4.5.0 h1:26XckmmF6MhlXt91Bu1yY6R51jy1Ns/C3XgIfvyeTRo=
github.com/opensearch-project/opensearch-go/v4 v4.6.0/go.mod h1:3iZtb4SNt3IzaxavKq0dURh1AmtVgYW71E4XqmYnIiQ= github.com/opensearch-project/opensearch-go/v4 v4.5.0/go.mod h1:VmFc7dqOEM3ZtLhrpleOzeq+cqUgNabqQG5gX0xId64=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
@@ -1315,8 +1315,8 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg=
go.opentelemetry.io/contrib/zpages v0.63.0 h1:TppOKuZGbqXMgsfjqq3i09N5Vbo1JLtLImUqiTPGnX4= go.opentelemetry.io/contrib/zpages v0.63.0 h1:TppOKuZGbqXMgsfjqq3i09N5Vbo1JLtLImUqiTPGnX4=
go.opentelemetry.io/contrib/zpages v0.63.0/go.mod h1:5F8uugz75ay/MMhRRhxAXY33FuaI8dl7jTxefrIy5qk= go.opentelemetry.io/contrib/zpages v0.63.0/go.mod h1:5F8uugz75ay/MMhRRhxAXY33FuaI8dl7jTxefrIy5qk=
go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54=
@@ -1325,14 +1325,14 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0 h1:kJxSDN4SgWWTjG/hPp3O7LCGLcHXFlvS2/FFOrwL+SE=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.38.0/go.mod h1:mgIOzS7iZeKJdeB8/NYHrJ48fdGc71Llo5bJ1J4DWUE=
go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
@@ -1392,8 +1392,8 @@ golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac/go.mod h1:hH+7mtFmImwwcMvScy
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
golang.org/x/image v0.34.0 h1:33gCkyw9hmwbZJeZkct8XyR11yH889EQt/QH4VmXMn8= golang.org/x/image v0.33.0 h1:LXRZRnv1+zGd5XBUVRFmYEphyyKJjQjCRiOuAP3sZfQ=
golang.org/x/image v0.34.0/go.mod h1:2RNFBZRB+vnwwFil8GkMdRvrJOFd1AzdZI6vOY+eJVU= golang.org/x/image v0.33.0/go.mod h1:DD3OsTYT9chzuzTQt+zMcOlBHgfoKQb1gry8p76Y1sc=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1744,10 +1744,10 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE= google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE=
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE=
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE= google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4=
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -1763,8 +1763,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
google.golang.org/grpc/examples v0.0.0-20211102180624-670c133e568e h1:m7aQHHqd0q89mRwhwS9Bx2rjyl/hsFAeta+uGrHsQaU= google.golang.org/grpc/examples v0.0.0-20211102180624-670c133e568e h1:m7aQHHqd0q89mRwhwS9Bx2rjyl/hsFAeta+uGrHsQaU=
google.golang.org/grpc/examples v0.0.0-20211102180624-670c133e568e/go.mod h1:gID3PKrg7pWKntu9Ss6zTLJ0ttC0X9IHgREOCZwbCVU= google.golang.org/grpc/examples v0.0.0-20211102180624-670c133e568e/go.mod h1:gID3PKrg7pWKntu9Ss6zTLJ0ttC0X9IHgREOCZwbCVU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=

View File

@@ -2,7 +2,6 @@ package command
import ( import (
"bytes" "bytes"
"context"
"crypto/tls" "crypto/tls"
"encoding/base64" "encoding/base64"
"errors" "errors"
@@ -11,10 +10,8 @@ import (
"net/http" "net/http"
"os" "os"
"os/exec" "os/exec"
"os/signal"
"strconv" "strconv"
"strings" "strings"
"syscall"
"time" "time"
"github.com/olekukonko/tablewriter" "github.com/olekukonko/tablewriter"
@@ -41,7 +38,7 @@ func BenchmarkCommand(cfg *config.Config) *cobra.Command {
func BenchmarkClientCommand(cfg *config.Config) *cobra.Command { func BenchmarkClientCommand(cfg *config.Config) *cobra.Command {
benchClientCmd := &cobra.Command{ benchClientCmd := &cobra.Command{
Use: "client", Use: "client",
Short: "Start a client that continuously makes web requests and prints stats. The options mimic curl, but we default to PROPFIND requests.", Short: "Start a client that continuously makes web requests and prints stats. The options mimic curl, but URL must be at the end.",
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
jobs, err := cmd.Flags().GetInt("jobs") jobs, err := cmd.Flags().GetInt("jobs")
if err != nil { if err != nil {
@@ -49,89 +46,18 @@ func BenchmarkClientCommand(cfg *config.Config) *cobra.Command {
} }
insecure, _ := cmd.Flags().GetBool("insecure") insecure, _ := cmd.Flags().GetBool("insecure")
opt := clientOptions{ opt := clientOptions{
request: cmd.Flag("request").Value.String(),
url: args[0], url: args[0],
insecure: insecure, insecure: insecure,
jobs: jobs, jobs: jobs,
headers: make(map[string]string), headers: make(map[string]string),
data: []byte(cmd.Flag("data").Value.String()),
} }
if d, _ := cmd.Flags().GetString("data-raw"); d != "" {
opt.request = "POST"
opt.headers["Content-Type"] = "application/x-www-form-urlencoded"
opt.data = []byte(d)
}
if d, _ := cmd.Flags().GetString("data"); d != "" {
opt.request = "POST"
opt.headers["Content-Type"] = "application/x-www-form-urlencoded"
if strings.HasPrefix(d, "@") {
filePath := strings.TrimPrefix(d, "@")
var data []byte
var err error
// read from file or stdin and trim trailing newlines
if filePath == "-" {
data, err = os.ReadFile("/dev/stdin")
} else {
data, err = os.ReadFile(filePath)
}
if err != nil {
log.Fatal(errors.New("could not read data from file '" + filePath + "': " + err.Error()))
}
// clean byte array similar to curl's --data parameter
// It removes leading/trailing whitespace and converts line breaks to spaces
// Trim leading and trailing whitespace
data = bytes.TrimSpace(data)
// Replace newlines and carriage returns with spaces
data = bytes.ReplaceAll(data, []byte("\r\n"), []byte(" "))
data = bytes.ReplaceAll(data, []byte("\n"), []byte(" "))
data = bytes.ReplaceAll(data, []byte("\r"), []byte(" "))
// Replace multiple spaces with single space
for bytes.Contains(data, []byte(" ")) {
data = bytes.ReplaceAll(data, []byte(" "), []byte(" "))
}
opt.data = data
} else {
opt.data = []byte(d)
}
}
if d, _ := cmd.Flags().GetString("data-binary"); d != "" {
opt.request = "POST"
opt.headers["Content-Type"] = "application/x-www-form-urlencoded"
if strings.HasPrefix(d, "@") {
filePath := strings.TrimPrefix(d, "@")
var data []byte
var err error
if filePath == "-" {
data, err = os.ReadFile("/dev/stdin")
} else {
data, err = os.ReadFile(filePath)
}
if err != nil {
log.Fatal(errors.New("could not read data from file '" + filePath + "': " + err.Error()))
}
opt.data = data
} else {
opt.data = []byte(d)
}
}
// override method if specified
if request, _ := cmd.Flags().GetString("request"); request != "" {
opt.request = request
}
if opt.url == "" { if opt.url == "" {
log.Fatal(errors.New("no URL specified")) log.Fatal(errors.New("no URL specified"))
} }
headersSlice, err := cmd.Flags().GetStringSlice("header") headersSlice, err := cmd.Flags().GetStringSlice("headers")
if err != nil { if err != nil {
return err return err
} }
@@ -198,29 +124,17 @@ func BenchmarkClientCommand(cfg *config.Config) *cobra.Command {
defer opt.ticker.Stop() defer opt.ticker.Stop()
} }
// Set up signal handling for Ctrl+C return client(opt)
ctx, cancel := context.WithCancel(cmd.Context())
defer cancel()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
go func() {
<-sigChan
fmt.Println("\nReceived interrupt signal, shutting down...")
cancel()
}()
return client(ctx, opt)
}, },
} }
// TODO with v3 'flag.Persistent: true' can be set to make the order of flags no longer relevant \o/
// flags mimicing curl // flags mimicing curl
benchClientCmd.Flags().StringP("request", "X", "PROPFIND", "Specifies a custom request method to use when communicating with the HTTP server.") benchClientCmd.Flags().StringP("request", "X", "PROPFIND", "Specifies a custom request method to use when communicating with the HTTP server.")
benchClientCmd.Flags().StringP("user", "u", "admin:admin", "Specify the user name and password to use for server authentication.") benchClientCmd.Flags().StringP("user", "u", "admin:admin", "Specify the user name and password to use for server authentication.")
benchClientCmd.Flags().BoolP("insecure", "k", false, "Skip the TLS verification step and proceed without checking.") benchClientCmd.Flags().BoolP("insecure", "k", false, "Skip the TLS verification step and proceed without checking.")
benchClientCmd.Flags().StringP("data", "d", "", "Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want to read the data from stdin. When -d, --data is told to read from a file like that, carriage returns and newlines are stripped out. If you do not want the @ character to have a special interpretation use --data-raw instead.") benchClientCmd.Flags().StringP("data", "d", "", "Sends the specified data in a request to the HTTP server.")
benchClientCmd.Flags().StringP("data-raw", "", "", "Sends the specified data in a request to the HTTP server.")
benchClientCmd.Flags().StringP("data-binary", "", "", "This posts data exactly as specified with no extra processing whatsoever. If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want to read the data from stdin.")
benchClientCmd.Flags().StringSliceP("headers", "H", []string{}, "Extra header to include in information sent.") benchClientCmd.Flags().StringSliceP("headers", "H", []string{}, "Extra header to include in information sent.")
benchClientCmd.Flags().String("rate", "", "Specify the maximum transfer frequency you allow a client to use - in number of transfer starts per time unit (sometimes called request rate). The request rate is provided as \"N/U\" where N is an integer number and U is a time unit. Supported units are 's' (second), 'm' (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The default time unit, if no \"/U\" is provided, is number of transfers per hour.") benchClientCmd.Flags().String("rate", "", "Specify the maximum transfer frequency you allow a client to use - in number of transfer starts per time unit (sometimes called request rate). The request rate is provided as \"N/U\" where N is an integer number and U is a time unit. Supported units are 's' (second), 'm' (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The default time unit, if no \"/U\" is provided, is number of transfers per hour.")
@@ -244,7 +158,8 @@ type clientOptions struct {
jobs int jobs int
} }
func client(ctx context.Context, o clientOptions) error { func client(o clientOptions) error {
type stat struct { type stat struct {
job int job int
duration time.Duration duration time.Duration
@@ -263,13 +178,6 @@ func client(ctx context.Context, o clientOptions) error {
cookies := map[string]*http.Cookie{} cookies := map[string]*http.Cookie{}
for { for {
// Check if context is cancelled
select {
case <-ctx.Done():
return
default:
}
req, err := http.NewRequest(o.request, o.url, bytes.NewReader(o.data)) req, err := http.NewRequest(o.request, o.url, bytes.NewReader(o.data))
if err != nil { if err != nil {
log.Printf("client %d: could not create request: %s\n", i, err) log.Printf("client %d: could not create request: %s\n", i, err)
@@ -287,35 +195,20 @@ func client(ctx context.Context, o clientOptions) error {
res, err := client.Do(req) res, err := client.Do(req)
duration := -time.Until(start) duration := -time.Until(start)
if err != nil { if err != nil {
// Check if error is due to context cancellation
if ctx.Err() != nil {
return
}
log.Printf("client %d: could not create request: %s\n", i, err) log.Printf("client %d: could not create request: %s\n", i, err)
time.Sleep(time.Second) time.Sleep(time.Second)
} else { } else {
res.Body.Close() res.Body.Close()
select { stats <- stat{
case stats <- stat{
job: i, job: i,
duration: duration, duration: duration,
status: res.StatusCode, status: res.StatusCode,
}:
case <-ctx.Done():
return
} }
for _, c := range res.Cookies() { for _, c := range res.Cookies() {
cookies[c.Name] = c cookies[c.Name] = c
} }
} }
// Sleep with context awareness time.Sleep(o.rateDelay - duration)
if o.rateDelay > duration {
select {
case <-time.After(o.rateDelay - duration):
case <-ctx.Done():
return
}
}
} }
}(i) }(i)
} }
@@ -324,14 +217,9 @@ func client(ctx context.Context, o clientOptions) error {
if o.ticker == nil { if o.ticker == nil {
// no ticker, just write every request // no ticker, just write every request
for { for {
select { stat := <-stats
case stat := <-stats: numRequests++
numRequests++ fmt.Printf("req %d took %v and returned status %d\n", numRequests, stat.duration, stat.status)
fmt.Printf("req %d took %v and returned status %d\n", numRequests, stat.duration, stat.status)
case <-ctx.Done():
fmt.Println("\nShutting down...")
return nil
}
} }
} }
@@ -347,12 +235,6 @@ func client(ctx context.Context, o clientOptions) error {
numRequests = 0 numRequests = 0
duration = 0 duration = 0
} }
case <-ctx.Done():
if numRequests > 0 {
fmt.Printf("\n%d req at %v/req\n", numRequests, duration/time.Duration(numRequests))
}
fmt.Println("Shutting down...")
return nil
} }
} }

View File

@@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n" "Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-01-07 00:07+0000\n" "POT-Creation-Date: 2025-12-18 00:04+0000\n"
"PO-Revision-Date: 2025-01-27 10:17+0000\n" "PO-Revision-Date: 2025-01-27 10:17+0000\n"
"Last-Translator: ii kaka, 2025\n" "Last-Translator: ii kaka, 2025\n"
"Language-Team: Japanese (https://app.transifex.com/opencloud-eu/teams/204053/ja/)\n" "Language-Team: Japanese (https://app.transifex.com/opencloud-eu/teams/204053/ja/)\n"

View File

@@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n" "Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-01-06 00:06+0000\n" "POT-Creation-Date: 2025-12-17 00:03+0000\n"
"PO-Revision-Date: 2025-01-27 10:17+0000\n" "PO-Revision-Date: 2025-01-27 10:17+0000\n"
"Last-Translator: Quan Tran, 2025\n" "Last-Translator: Quan Tran, 2025\n"
"Language-Team: Vietnamese (https://app.transifex.com/opencloud-eu/teams/204053/vi/)\n" "Language-Team: Vietnamese (https://app.transifex.com/opencloud-eu/teams/204053/vi/)\n"

View File

@@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n" "Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-01-07 00:07+0000\n" "POT-Creation-Date: 2025-12-18 00:04+0000\n"
"PO-Revision-Date: 2025-01-27 10:17+0000\n" "PO-Revision-Date: 2025-01-27 10:17+0000\n"
"Last-Translator: ii kaka, 2025\n" "Last-Translator: ii kaka, 2025\n"
"Language-Team: Japanese (https://app.transifex.com/opencloud-eu/teams/204053/ja/)\n" "Language-Team: Japanese (https://app.transifex.com/opencloud-eu/teams/204053/ja/)\n"

View File

@@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n" "Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-01-06 00:06+0000\n" "POT-Creation-Date: 2025-12-17 00:03+0000\n"
"PO-Revision-Date: 2025-01-27 10:17+0000\n" "PO-Revision-Date: 2025-01-27 10:17+0000\n"
"Last-Translator: Quan Tran, 2025\n" "Last-Translator: Quan Tran, 2025\n"
"Language-Team: Vietnamese (https://app.transifex.com/opencloud-eu/teams/204053/vi/)\n" "Language-Team: Vietnamese (https://app.transifex.com/opencloud-eu/teams/204053/vi/)\n"

View File

@@ -306,11 +306,10 @@ func (g Graph) GetUsers(w http.ResponseWriter, r *http.Request) {
finalUsers := make([]*libregraph.User, len(users)) finalUsers := make([]*libregraph.User, len(users))
for i, u := range users { for i, u := range users {
finalUsers[i] = &libregraph.User{ finalUsers[i] = &libregraph.User{
Id: u.Id, Id: u.Id,
DisplayName: u.DisplayName, DisplayName: u.DisplayName,
UserType: u.UserType, UserType: u.UserType,
Identities: u.Identities, Identities: u.Identities,
OnPremisesSamAccountName: u.OnPremisesSamAccountName,
} }
if g.config.API.ShowUserEmailInResults { if g.config.API.ShowUserEmailInResults {

View File

@@ -11,7 +11,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL\n" "Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2026-01-07 00:07+0000\n" "POT-Creation-Date: 2025-12-18 00:04+0000\n"
"PO-Revision-Date: 2025-01-27 10:17+0000\n" "PO-Revision-Date: 2025-01-27 10:17+0000\n"
"Last-Translator: ii kaka, 2025\n" "Last-Translator: ii kaka, 2025\n"
"Language-Team: Japanese (https://app.transifex.com/opencloud-eu/teams/204053/ja/)\n" "Language-Team: Japanese (https://app.transifex.com/opencloud-eu/teams/204053/ja/)\n"

View File

@@ -437,10 +437,18 @@ Start ClamAV daemon
#### 2. Setup clamAV With Docker #### 2. Setup clamAV With Docker
##### Linux OS user
Run `clamAV` through docker Run `clamAV` through docker
```bash ```bash
docker run -d -p 3310:3310 scharfvi/clamav:latest docker run -d -p 3310:3310 owncloudci/clamavd
```
##### Mac OS user
```bash
docker run -d -p 3310:3310 -v /your/local/filesystem/path/to/clamav/:/var/lib/clamav mkodockx/docker-clamav:alpine
``` ```
### Run OpenCloud ### Run OpenCloud

View File

@@ -1577,7 +1577,7 @@ class FeatureContext extends BehatVariablesContext {
* *
* @return mixed * @return mixed
*/ */
public function getJsonDecodedResponseBodyContent(?ResponseInterface $response = null): mixed { public function getJsonDecodedResponseBodyContent(ResponseInterface $response = null): mixed {
$response = $response ?? $this->response; $response = $response ?? $this->response;
$response->getBody()->rewind(); $response->getBody()->rewind();
return HttpRequestHelper::getJsonDecodedResponseBodyContent($response); return HttpRequestHelper::getJsonDecodedResponseBodyContent($response);

View File

@@ -1025,7 +1025,7 @@ trait Provisioning {
*/ */
public function userHasBeenCreated( public function userHasBeenCreated(
array $userData, array $userData,
?string $byUser = null string $byUser = null
): void { ): void {
$userId = null; $userId = null;

View File

@@ -450,7 +450,7 @@ trait Sharing {
string $user, string $user,
string $path, string $path,
bool $publicUpload = false, bool $publicUpload = false,
?string $sharePassword = null, string $sharePassword = null,
$permissions = null, $permissions = null,
?string $linkName = null, ?string $linkName = null,
?string $expireDate = null ?string $expireDate = null
@@ -1207,7 +1207,7 @@ trait Sharing {
*/ */
public function deleteLastShareUsingSharingApi( public function deleteLastShareUsingSharingApi(
string $user, string $user,
?string $sharer = null, string $sharer = null,
bool $deleteLastPublicLink = false bool $deleteLastPublicLink = false
): ResponseInterface { ): ResponseInterface {
$user = $this->getActualUsername($user); $user = $this->getActualUsername($user);
@@ -2672,7 +2672,7 @@ trait Sharing {
* @return ResponseInterface * @return ResponseInterface
* @throws GuzzleException * @throws GuzzleException
*/ */
public function expireShare(?string $shareId = null): ResponseInterface { public function expireShare(string $shareId = null): ResponseInterface {
$adminUser = $this->getAdminUsername(); $adminUser = $this->getAdminUsername();
if ($shareId === null) { if ($shareId === null) {
$shareId = $this->getLastCreatedUserGroupShareId(); $shareId = $this->getLastCreatedUserGroupShareId();

View File

@@ -1644,7 +1644,7 @@ trait WebDav {
string $user, string $user,
string $source, string $source,
string $destination, string $destination,
?string $spaceId = null, string $spaceId = null,
?bool $isGivenStep = false ?bool $isGivenStep = false
): ResponseInterface { ): ResponseInterface {
$user = $this->getActualUsername($user); $user = $this->getActualUsername($user);
@@ -4054,7 +4054,7 @@ trait WebDav {
* *
* @return string|null * @return string|null
*/ */
public function getFileIdForPath(string $user, string $path, ?string $spaceId = null): ?string { public function getFileIdForPath(string $user, string $path, string $spaceId = null): ?string {
$user = $this->getActualUsername($user); $user = $this->getActualUsername($user);
try { try {
return WebDavHelper::getFileIdForPath( return WebDavHelper::getFileIdForPath(

View File

@@ -1,6 +1,6 @@
services: services:
acceptance-tests: acceptance-tests:
image: scharfvi/php-alpine-ci:8.4 image: owncloudci/php:8.2
working_dir: /woodpecker/src/github.com/opencloud-eu/opencloud working_dir: /woodpecker/src/github.com/opencloud-eu/opencloud
command: /bin/bash /test/run-tests.sh command: /bin/bash /test/run-tests.sh
environment: environment:

View File

@@ -5,5 +5,5 @@ services:
- clamav - clamav
command: clamav:3310 command: clamav:3310
clamav: clamav:
image: scharfvi/clamav:latest image: mkodockx/docker-clamav:alpine

View File

@@ -1351,7 +1351,6 @@ Feature: get users
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"userType" "userType"
], ],
"properties": { "properties": {
@@ -1363,10 +1362,6 @@ Feature: get users
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"type": "string",
"const": "Alice"
},
"userType": { "userType": {
"type": "string", "type": "string",
"const": "Member" "const": "Member"
@@ -1461,7 +1456,6 @@ Feature: get users
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"userType" "userType"
], ],
"properties": { "properties": {
@@ -1473,10 +1467,6 @@ Feature: get users
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"type": "string",
"const": "Alice"
},
"userType": { "userType": {
"type": "string", "type": "string",
"const": "Member" "const": "Member"
@@ -1511,7 +1501,6 @@ Feature: get users
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"userType" "userType"
], ],
"properties": { "properties": {
@@ -1523,10 +1512,6 @@ Feature: get users
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"type": "string",
"const": "Alice"
},
"userType": { "userType": {
"type": "string", "type": "string",
"const": "Member" "const": "Member"
@@ -1545,6 +1530,7 @@ Feature: get users
| displayName | Alice Hansen | | displayName | Alice Hansen |
| email | another-alice@example.org | | email | another-alice@example.org |
| password | containsCharacters(*:!;_+-&) | | password | containsCharacters(*:!;_+-&) |
And the administrator has assigned the role "Admin" to user "Alice" using the Graph API
When user "Brian" searches for user "alice" using Graph API When user "Brian" searches for user "alice" using Graph API
Then the HTTP status code should be "200" Then the HTTP status code should be "200"
And the JSON data of the search response should not contain users email And the JSON data of the search response should not contain users email
@@ -1568,7 +1554,6 @@ Feature: get users
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"userType" "userType"
], ],
"properties": { "properties": {
@@ -1580,10 +1565,6 @@ Feature: get users
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"type": "string",
"const": "Alice"
},
"userType": { "userType": {
"type": "string", "type": "string",
"const": "Member" "const": "Member"
@@ -1595,7 +1576,6 @@ Feature: get users
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"userType" "userType"
], ],
"properties": { "properties": {
@@ -1607,13 +1587,11 @@ Feature: get users
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"type": "string",
"const": "another-alice"
},
"userType": { "userType": {
"type": "string", "type": "string",
"const": "Member" "const": [
"Admin"
]
} }
} }
} }

View File

@@ -274,7 +274,6 @@ Feature: edit/search user including email
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"mail", "mail",
"userType" "userType"
], ],
@@ -286,9 +285,6 @@ Feature: edit/search user including email
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"const": "Alice"
},
"mail": { "mail": {
"const": "alice@example.org" "const": "alice@example.org"
}, },
@@ -370,7 +366,6 @@ Feature: edit/search user including email
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"mail", "mail",
"userType" "userType"
], ],
@@ -382,9 +377,6 @@ Feature: edit/search user including email
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"const": "Alice"
},
"mail": { "mail": {
"const": "alice@example.org" "const": "alice@example.org"
}, },
@@ -425,7 +417,6 @@ Feature: edit/search user including email
"required": [ "required": [
"displayName", "displayName",
"id", "id",
"onPremisesSamAccountName",
"mail", "mail",
"userType" "userType"
], ],
@@ -437,9 +428,6 @@ Feature: edit/search user including email
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"const": "Alice"
},
"mail": { "mail": {
"const": "alice@example.org" "const": "alice@example.org"
}, },
@@ -464,9 +452,6 @@ Feature: edit/search user including email
"type": "string", "type": "string",
"pattern": "^%user_id_pattern%$" "pattern": "^%user_id_pattern%$"
}, },
"onPremisesSamAccountName": {
"const": "another-alice"
},
"mail": { "mail": {
"const": "another-alice@example.org" "const": "another-alice@example.org"
}, },

View File

@@ -45,7 +45,7 @@ Feature: Multi-tenancy
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}, },
"onPremisesSamAccountName": { "onPremisesSamAccountName": {
"const": "alice" "const": ""
}, },
"userType": { "userType": {
"const": "Member" "const": "Member"

View File

@@ -258,14 +258,16 @@ function run_behat_tests() {
fi fi
fi fi
FAILED_SCENARIO_PATHS_COLORED=`awk '/Failed scenarios:/',0 ${TEST_LOG_FILE} | grep -a feature` FAILED_SCENARIO_PATHS_COLORED=`awk '/Failed (scenarios|hooks):/',0 ${TEST_LOG_FILE} | grep -a feature`
# There will be some ANSI escape codes for color in the FEATURE_COLORED var. # There will be some ANSI escape codes for color in the FEATURE_COLORED var.
# Strip them out so we can pass just the ordinary feature details to Behat. # Strip them out so we can pass just the ordinary feature details to Behat.
# Also strip everything after ".feature:XX", including text such as "(on line xx)" added by Behat indicating the failing step's line number. # Also strip everything after ".feature:XX", including text such as "(on line xx)" added by Behat indicating the failing step's line number.
# Thanks to https://en.wikipedia.org/wiki/Tee_(command) and # Thanks to https://en.wikipedia.org/wiki/Tee_(command) and
# https://stackoverflow.com/questions/23416278/how-to-strip-ansi-escape-sequences-from-a-variable # https://stackoverflow.com/questions/23416278/how-to-strip-ansi-escape-sequences-from-a-variable
# for ideas. # for ideas.
FAILED_SCENARIO_PATHS=$(echo "${FAILED_SCENARIO_PATHS_COLORED}" | sed "s/\x1b[^m]*m//g" | sed 's/\(\.feature:[0-9]\+\).*/\1/') FAILED_SCENARIO_PATHS=$(echo "${FAILED_SCENARIO_PATHS_COLORED}" | sed "s/\x1b[^m]*m//g" | sed "s/AfterScenario \"//g" | sed 's/\(\.feature:[0-9]\+\).*/\1/')
# remove duplicate scenario paths
FAILED_SCENARIO_PATHS=$(echo "$FAILED_SCENARIO_PATHS" | awk '!seen[$0]++')
# If something else went wrong, and there were no failed scenarios, # If something else went wrong, and there were no failed scenarios,
# then the awk, grep, sed command sequence above ends up with an empty string. # then the awk, grep, sed command sequence above ends up with an empty string.

View File

@@ -1,89 +0,0 @@
const fs = require("fs");
const CI_REPO_NAME = process.env.CI_REPO_NAME;
const CI_COMMIT_SHA = process.env.CI_COMMIT_SHA;
const CI_WORKFLOW_NAME = process.env.CI_WORKFLOW_NAME;
const opencloudBuildWorkflow = "build-opencloud-for-testing";
const webCacheWorkflows = ["cache-web", "cache-web-pnpm", "cache-browsers"];
const INFO_URL = `https://s3.ci.opencloud.eu/public/${CI_REPO_NAME}/pipelines/${CI_COMMIT_SHA}/pipeline_info.json`;
function getFailedWorkflows(workflows) {
const failedWorkflows = [];
for (const workflow of workflows) {
if (workflow.state !== "success") {
failedWorkflows.push(workflow.name);
}
}
return failedWorkflows;
}
function hasFailingTestWorkflow(failedWorkflows) {
for (const workflowName of failedWorkflows) {
if (workflowName.startsWith("test-")) {
return true;
}
}
return false;
}
function hasFailingE2eTestWorkflow(failedWorkflows) {
for (const workflowName of failedWorkflows) {
if (workflowName.startsWith("test-e2e-")) {
return true;
}
}
return false;
}
async function main() {
const infoResponse = await fetch(INFO_URL);
if (infoResponse.status === 404) {
console.log("[INFO] No matching previous pipeline found. Continue...");
process.exit(0);
} else if (!infoResponse.ok) {
console.error(
"[ERROR] Failed to fetch previous pipeline info:" +
`\n URL: ${INFO_URL}\n Status: ${infoResponse.status}`
);
process.exit(1);
}
const info = await infoResponse.json();
console.log(info);
if (info.status === "success") {
console.log(
"[INFO] All workflows passed in previous pipeline. Full restart. Continue..."
);
process.exit(0);
}
const failedWorkflows = getFailedWorkflows(info.workflows);
// NOTE: implement for test pipelines only for now
// // run the build workflow if any test workflow has failed
// if (
// CI_WORKFLOW_NAME === opencloudBuildWorkflow &&
// hasFailingTestWorkflow(failedWorkflows)
// ) {
// process.exit(0);
// }
// // run the web cache workflows if any e2e test workflow has failed
// if (
// webCacheWorkflows.includes(CI_WORKFLOW_NAME) &&
// hasFailingE2eTestWorkflow(failedWorkflows)
// ) {
// process.exit(0);
// }
if (!failedWorkflows.includes(CI_WORKFLOW_NAME)) {
console.log("[INFO] Workflow passed in previous pipeline. Skip...");
fs.appendFileSync(".woodpecker.env", "SKIP_WORKFLOW=true\n");
process.exit(0);
}
console.log("[INFO] Restarting previously failed workflow. Continue...");
}
main();

View File

@@ -1,27 +0,0 @@
#!/bin/bash
set -e
mc alias set s3 $MC_HOST $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY
# check previous pipeline
URL="https://s3.ci.opencloud.eu/$PUBLIC_BUCKET/$CI_REPO_NAME/pipelines/$CI_COMMIT_SHA/prev_pipeline"
status=$(curl -s -o prev_pipeline "$URL" -w '%{http_code}')
if [ "$status" == "200" ];
then
source prev_pipeline
REPO_ID=$(printf '%s' "$CI_PIPELINE_URL" | sed 's|.*/repos/\([0-9]*\)/.*|\1|')
p_status=$(curl -s -o pipeline_info.json "$CI_SYSTEM_URL/api/repos/$REPO_ID/pipelines/$PREV_PIPELINE_NUMBER" -w "%{http_code}")
if [ "$p_status" != "200" ];
then
echo -e "[ERROR] Failed to fetch previous pipeline info.\n URL: $CI_SYSTEM_URL/api/repos/$REPO_ID/pipelines/$PREV_PIPELINE_NUMBER\n Status: $p_status"
exit 1
fi
# update previous pipeline info
mc cp -a pipeline_info.json "s3/$PUBLIC_BUCKET/$CI_REPO_NAME/pipelines/$CI_COMMIT_SHA/"
fi
# upload current pipeline number for the next pipeline
echo "PREV_PIPELINE_NUMBER=$CI_PIPELINE_NUMBER" > prev_pipeline
mc cp -a prev_pipeline "s3/$PUBLIC_BUCKET/$CI_REPO_NAME/pipelines/$CI_COMMIT_SHA/"

View File

@@ -1,7 +1,7 @@
{ {
"config": { "config": {
"platform": { "platform": {
"php": "8.3" "php": "8.2"
}, },
"allow-plugins": { "allow-plugins": {
"composer/package-versions-deprecated": true "composer/package-versions-deprecated": true
@@ -20,7 +20,7 @@
"guzzlehttp/guzzle": "^7.7", "guzzlehttp/guzzle": "^7.7",
"phpunit/phpunit": "^9.6", "phpunit/phpunit": "^9.6",
"laminas/laminas-ldap": "^2.15", "laminas/laminas-ldap": "^2.15",
"ankitpokhrel/tus-php": "^2.4", "ankitpokhrel/tus-php": "^2.3",
"swaggest/json-schema": "^0.12.42", "swaggest/json-schema": "^0.12.42",
"splitbrain/php-archive": "^1.3" "splitbrain/php-archive": "^1.3"
} }

View File

@@ -59,7 +59,7 @@ func ExtractMetadata(r io.Reader) (md *meta.Data, err error) {
soiSegment, err := segReader.ReadSegment() soiSegment, err := segReader.ReadSegment()
if err != nil { if err != nil {
if q := err.Error(); strings.Contains(q, "invalid marker identifier") || strings.Contains(q, "unrecognised marker type") { if strings.Contains(err.Error(), "invalid marker identifier") {
err = nil err = nil
} }
return nil, err return nil, err

View File

@@ -5,7 +5,7 @@ import os
import subprocess import subprocess
VERSION = "1.8.18" VERSION = "1.8.17"
def run(*args: str): def run(*args: str):

View File

@@ -1,8 +1,59 @@
version: "2"
run: run:
timeout: 10m
modules-download-mode: readonly modules-download-mode: readonly
linters-settings:
errcheck:
check-blank: true
check-type-assertions: false
errorlint:
check-generated: false
default-signifies-exhaustive: false
exhaustive:
default-signifies-exhaustive: false
gci:
sections:
- standard
- default
- prefix(github.com/opensearch-project/opensearch-go)
goconst:
min-len: 3
min-occurrences: 3
godox:
keywords:
- BUG
- FIXME
- HACK
goimports:
local-prefixes: github.com/opensearch-project/opensearch-go
lll:
line-length: 140
nolintlint:
allow-leading-space: false
require-explanation: true
require-specific: true
unparam:
check-exported: true
misspell:
locale: US
ignore-words:
- expect
- cancelled
prealloc:
simple: true
range-loops: true
for-loops: false
revive:
rules:
- name: exported
severity: error
disabled: false
arguments:
- "checkPrivateReceivers"
- "sayRepetitiveInsteadOfStutters"
linters: linters:
default: none disable-all: true
enable: enable:
- asasalint - asasalint
- asciicheck - asciicheck
@@ -19,7 +70,10 @@ linters:
- errchkjson - errchkjson
- errname - errname
- errorlint - errorlint
- execinquery
- exhaustive - exhaustive
- exportloopref
- gci
- ginkgolinter - ginkgolinter
- gocheckcompilerdirectives - gocheckcompilerdirectives
- gochecknoglobals - gochecknoglobals
@@ -27,11 +81,15 @@ linters:
- goconst - goconst
- gocritic - gocritic
- godox - godox
- gofmt
- gofumpt
- goheader - goheader
- goimports
- gomoddirectives - gomoddirectives
- gomodguard - gomodguard
- goprintffuncname - goprintffuncname
- gosec - gosec
- gosimple
- govet - govet
- grouper - grouper
- importas - importas
@@ -59,10 +117,12 @@ linters:
- rowserrcheck - rowserrcheck
- sqlclosecheck - sqlclosecheck
- staticcheck - staticcheck
- stylecheck
- tagalign - tagalign
- testpackage - testpackage
- thelper - thelper
- tparallel - tparallel
- typecheck
- unconvert - unconvert
- unparam - unparam
- unused - unused
@@ -70,110 +130,46 @@ linters:
- wastedassign - wastedassign
- whitespace - whitespace
- zerologlint - zerologlint
settings:
errcheck: issues:
check-type-assertions: false include:
check-blank: true - EXC0012
exhaustive: - EXC0014
default-signifies-exhaustive: false exclude-rules:
goconst: - path: (_test\.go|internal/)
min-len: 3 linters:
min-occurrences: 3 - cyclop
godox: - dupl
keywords: - errcheck
- BUG - gochecknoglobals
- FIXME - gochecknoinits
- HACK - goconst
lll: - noctx
line-length: 140 - linters:
misspell: - gosec
locale: US text: "math/rand"
ignore-rules: path: _test\.go
- expect - linters:
- cancelled - gosec
nolintlint: text: "TLS InsecureSkipVerify set true"
require-explanation: true path: (_test\.go|internal/)
require-specific: true - linters:
prealloc: - gosec
simple: true text: "G108: Profiling endpoint is automatically exposed on /debug/pprof"
range-loops: true path: _test\.go
for-loops: false - linters:
revive: - goconst
rules: path: opensearchapi\/api_
- name: exported - linters:
arguments: - errcheck
- checkPrivateReceivers text: "Error return value of `debugLogger.Logf` is not checked"
- sayRepetitiveInsteadOfStutters - linters:
severity: error - errcheck
disabled: false - gochecknoglobals
unparam: path: opensearchtransport\/logger\.go
check-exported: true - linters:
exclusions: - nestif
generated: lax path: opensearchtransport/opensearchtransport.go
presets: - linters:
- common-false-positives - dupl
- legacy path: (-params\.go|api_indices|api_dangling\.go|api_point_in_time\.go|rethrottle\.go|api_cat-.*\.go|plugins/security/api_\w+.go|plugins/security/api_.*-patch.go)
- std-error-handling
rules:
- linters:
- cyclop
- dupl
- errcheck
- gochecknoglobals
- gochecknoinits
- goconst
- noctx
path: (_test\.go|internal/)
- linters:
- gosec
path: _test\.go
text: math/rand
- linters:
- gosec
path: (_test\.go|internal/)
text: TLS InsecureSkipVerify set true
- linters:
- gosec
path: _test\.go
text: 'G108: Profiling endpoint is automatically exposed on /debug/pprof'
- linters:
- goconst
path: -params\.go
- linters:
- errcheck
text: Error return value of `debugLogger.Logf` is not checked
- linters:
- errcheck
- gochecknoglobals
path: opensearchtransport\/logger\.go
- linters:
- nestif
path: opensearchtransport/opensearchtransport.go
- linters:
- dupl
path: (-params\.go|api_indices|api_dangling\.go|api_point_in_time\.go|rethrottle\.go|api_cat-.*\.go|plugins/security/api_\w+.go|plugins/security/api_.*-patch.go)
paths:
- third_party$
- builtin$
- examples$
formatters:
enable:
- gci
- gofmt
- gofumpt
- goimports
settings:
gci:
sections:
- standard
- default
- prefix(github.com/opensearch-project/opensearch-go)
goimports:
local-prefixes:
- github.com/opensearch-project/opensearch-go
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$

View File

@@ -2,41 +2,6 @@
Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
## [4.6.0]
### Dependencies
- Bump `github.com/aws/aws-sdk-go-v2/config` from 1.29.14 to 1.32.5 ([#707](https://github.com/opensearch-project/opensearch-go/pull/707), [#711](https://github.com/opensearch-project/opensearch-go/pull/711), [#719](https://github.com/opensearch-project/opensearch-go/pull/719), [#730](https://github.com/opensearch-project/opensearch-go/pull/730), [#737](https://github.com/opensearch-project/opensearch-go/pull/737), [#761](https://github.com/opensearch-project/opensearch-go/pull/761))
- Bump `github.com/aws/aws-sdk-go-v2` from 1.36.4 to 1.41.0 ([#710](https://github.com/opensearch-project/opensearch-go/pull/710), [#720](https://github.com/opensearch-project/opensearch-go/pull/720), [#759](https://github.com/opensearch-project/opensearch-go/pull/759))
- Bump `github.com/stretchr/testify` from 1.10.0 to 1.11.1 ([#728](https://github.com/opensearch-project/opensearch-go/pull/728))
- Bump `github.com/aws/aws-sdk-go` from 1.55.7 to 1.55.8 ([#716](https://github.com/opensearch-project/opensearch-go/pull/716))
### Added
- Adds new fields for Opensearch 3.0 ([#702](https://github.com/opensearch-project/opensearch-go/pull/702))
- Allow users to override signing port ([#721](https://github.com/opensearch-project/opensearch-go/pull/721))
- Add `phase_took` features supported from OpenSearch 2.12 ([#722](https://github.com/opensearch-project/opensearch-go/pull/722))
- Adds the action to refresh the search analyzers to the ISM plugin ([#686](https://github.com/opensearch-project/opensearch-go/pull/686))
### Changed
- Test against Opensearch 3.0 ([#702](https://github.com/opensearch-project/opensearch-go/pull/702))
- Add more SuggestOptions to SearchResp ([#713](https://github.com/opensearch-project/opensearch-go/pull/713))
- Updates Go version to 1.24 ([#674](https://github.com/opensearch-project/opensearch-go/pull/674))
- Replace `golang.org/x/exp/slices` usage with built-in `slices` ([#674](https://github.com/opensearch-project/opensearch-go/pull/674))
- Update golangci-linter to 1.64.8 ([#740](https://github.com/opensearch-project/opensearch-go/pull/740))
- Change MaxScore to pointer ([#740](https://github.com/opensearch-project/opensearch-go/pull/740))
- Update workflow action ([#760](https://github.com/opensearch-project/opensearch-go/pull/760))
- Migrate to golangci-lint v2 ([#760](https://github.com/opensearch-project/opensearch-go/pull/760))
### Deprecated
### Removed
### Fixed
- Missing "caused by" information in StructError ([#752](https://github.com/opensearch-project/opensearch-go/pull/752))
- Add missing `ignore_unavailable`, `allow_no_indices`, and `expand_wildcards` params to MSearch ([#757](https://github.com/opensearch-project/opensearch-go/pull/757))
- Fix `UpdateResp` to correctly parse the `get` field when `_source` is requested in update operations. ([#739](https://github.com/opensearch-project/opensearch-go/pull/739))
### Security
## [4.5.0] ## [4.5.0]
### Dependencies ### Dependencies
@@ -325,7 +290,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Uses `[]string` instead of `string` in `SnapshotDeleteRequest` ([#237](https://github.com/opensearch-project/opensearch-go/pull/237)) - Uses `[]string` instead of `string` in `SnapshotDeleteRequest` ([#237](https://github.com/opensearch-project/opensearch-go/pull/237))
- Updates workflows to reduce CI time, consolidate OpenSearch versions, update compatibility matrix ([#242](https://github.com/opensearch-project/opensearch-go/pull/242)) - Updates workflows to reduce CI time, consolidate OpenSearch versions, update compatibility matrix ([#242](https://github.com/opensearch-project/opensearch-go/pull/242))
- Moves @svencowart to emeritus maintainers ([#270](https://github.com/opensearch-project/opensearch-go/pull/270)) - Moves @svencowart to emeritus maintainers ([#270](https://github.com/opensearch-project/opensearch-go/pull/270))
- Reads, closes and replaces the http Response Body ([#300](https://github.com/opensearch-project/opensearch-go/pull/300)) - Reads, closes and replaces the http Reponse Body ([#300](https://github.com/opensearch-project/opensearch-go/pull/300))
### Fixed ### Fixed
@@ -364,7 +329,6 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Bumps `github.com/stretchr/testify` from 1.8.0 to 1.8.1 - Bumps `github.com/stretchr/testify` from 1.8.0 to 1.8.1
- Bumps `github.com/aws/aws-sdk-go` from 1.44.45 to 1.44.132 - Bumps `github.com/aws/aws-sdk-go` from 1.44.45 to 1.44.132
[4.6.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.5.0...v4.6.0
[4.5.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.4.0...v4.5.0 [4.5.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.4.0...v4.5.0
[4.4.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.3.0...v4.4.0 [4.4.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.3.0...v4.4.0
[4.3.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.2.0...v4.3.0 [4.3.0]: https://github.com/opensearch-project/opensearch-go/compare/v4.2.0...v4.3.0

View File

@@ -9,8 +9,6 @@ The below matrix shows the compatibility of the [`opensearch-go`](https://pkg.go
| -------------- | ------------------ | | -------------- | ------------------ |
| 1.x.0 | 1.x | | 1.x.0 | 1.x |
| 2.x.0 | 1.3.13-2.11.0 | | 2.x.0 | 1.3.13-2.11.0 |
| 3.x.0 | 1.3.13-2.12.0 |
| 4.x.0 | 1.3.20-3.0.0 |
## Upgrading ## Upgrading

View File

@@ -2,7 +2,7 @@
- [Getting Started](#getting-started) - [Getting Started](#getting-started)
- [Git Clone OpenSearch Go Client Repository](#git-clone-opensearch-go-client-repository) - [Git Clone OpenSearch Go Client Repository](#git-clone-opensearch-go-client-repository)
- [Install Prerequisites](#install-prerequisites) - [Install Prerequisites](#install-prerequisites)
- [Go 1.24](#go-124) - [Go 1.21](#go-121)
- [Docker](#docker) - [Docker](#docker)
- [Windows](#windows) - [Windows](#windows)
- [Unit Testing](#unit-testing) - [Unit Testing](#unit-testing)
@@ -29,9 +29,9 @@ Fork [opensearch-project/opensearch-go](https://github.com/opensearch-project/op
### Install Prerequisites ### Install Prerequisites
#### Go 1.24 #### Go 1.21
OpenSearch Go Client builds using [Go](https://go.dev/doc/install) 1.24 at a minimum. OpenSearch Go Client builds using [Go](https://go.dev/doc/install) 1.21 at a minimum.
#### Docker #### Docker

View File

@@ -6,6 +6,7 @@ This document contains a list of maintainers in this repo. See [opensearch-proje
| Maintainer | GitHub ID | Affiliation | | Maintainer | GitHub ID | Affiliation |
| ----------------------- | ----------------------------------------- | ------------------- | | ----------------------- | ----------------------------------------- | ------------------- |
| Daniel Doubrovkine | [dblock](https://github.com/dblock) | Independent |
| Jakob Hahn | [Jakob3xD](https://github.com/Jakob3xD) | Hetzner Online GmbH | | Jakob Hahn | [Jakob3xD](https://github.com/Jakob3xD) | Hetzner Online GmbH |
| Vacha Shah | [VachaShah](https://github.com/VachaShah) | Amazon | | Vacha Shah | [VachaShah](https://github.com/VachaShah) | Amazon |
| Vijayan Balasubramanian | [VijayanB](https://github.com/VijayanB) | Amazon | | Vijayan Balasubramanian | [VijayanB](https://github.com/VijayanB) | Amazon |
@@ -14,7 +15,6 @@ This document contains a list of maintainers in this repo. See [opensearch-proje
| Maintainer | GitHub ID | Affiliation | | Maintainer | GitHub ID | Affiliation |
| ---------------------- | ------------------------------------------- | ----------- | | ---------------------- | ------------------------------------------- | ----------- |
| Daniel Doubrovkine | [dblock](https://github.com/dblock) | Independent |
| Jack Mazanec | [jmazanec15](https://github.com/jmazanec15) | Amazon | | Jack Mazanec | [jmazanec15](https://github.com/jmazanec15) | Amazon |
| Rob Cowart | [robcowart](https://github.com/robcowart) | ElastiFlow | | Rob Cowart | [robcowart](https://github.com/robcowart) | ElastiFlow |
| Sven Cowart | [svencowart](https://github.com/svencowart) | | | Sven Cowart | [svencowart](https://github.com/svencowart) | |

View File

@@ -80,7 +80,9 @@ build-coverage:
##@ Development ##@ Development
lint: ## Run lint on the package lint: ## Run lint on the package
@make linters @printf "\033[2m→ Running lint...\033[0m\n"
go vet github.com/opensearch-project/opensearch-go/...
go list github.com/opensearch-project/opensearch-go/... | 'grep' -v internal | xargs golint -set_exit_status
package := "prettier" package := "prettier"
lint.markdown: lint.markdown:
@@ -227,7 +229,7 @@ cluster.clean: ## Remove unused Docker volumes and networks
docker system prune --volumes --force docker system prune --volumes --force
linters: linters:
docker run -t --rm -v $$(pwd):/app -v ~/.cache/golangci-lint/v2.7.2:/root/.cache -w /app golangci/golangci-lint:v2.7.2 golangci-lint run --timeout=5m -v docker run -t --rm -v $$(pwd):/app -v ~/.cache/golangci-lint/v1.54.2:/root/.cache -w /app golangci/golangci-lint:v1.54.2 golangci-lint run --timeout=5m
workflow: ## Run all github workflow commands here sequentially workflow: ## Run all github workflow commands here sequentially

View File

@@ -75,26 +75,10 @@ type Err struct {
RootCause []RootCause `json:"root_cause"` RootCause []RootCause `json:"root_cause"`
Type string `json:"type"` Type string `json:"type"`
Reason string `json:"reason"` Reason string `json:"reason"`
CausedBy *CausedBy `json:"caused_by,omitempty"`
Index string `json:"index,omitempty"` Index string `json:"index,omitempty"`
IndexUUID string `json:"index_uuid,omitempty"` IndexUUID string `json:"index_uuid,omitempty"`
} }
// CausedBy represents the optional caused_by of an API error response. Causes can be nested
type CausedBy struct {
Type string `json:"type"`
Reason string `json:"reason"`
CausedBy *CausedBy `json:"caused_by,omitempty"`
}
// String returns a string representation of CausedBy, handling nested structures
func (c *CausedBy) String() string {
if c.CausedBy == nil {
return fmt.Sprintf("{type: %s, reason: %s}", c.Type, c.Reason)
}
return fmt.Sprintf("{type: %s, reason: %s, caused_by: %s}", c.Type, c.Reason, c.CausedBy)
}
// RootCause represents the root_cause of an API error response // RootCause represents the root_cause of an API error response
type RootCause struct { type RootCause struct {
Type string `json:"type"` Type string `json:"type"`
@@ -105,13 +89,7 @@ type RootCause struct {
// Error returns a string // Error returns a string
func (e StructError) Error() string { func (e StructError) Error() string {
result := fmt.Sprintf("status: %d, type: %s, reason: %s, root_cause: %s", e.Status, e.Err.Type, e.Err.Reason, e.Err.RootCause) return fmt.Sprintf("status: %d, type: %s, reason: %s, root_cause: %s", e.Status, e.Err.Type, e.Err.Reason, e.Err.RootCause)
if e.Err.CausedBy != nil {
result += fmt.Sprintf(", caused_by: %s", e.Err.CausedBy)
}
return result
} }
// UnmarshalJSON is a custom unmarshal function for StructError returning custom errors in special cases // UnmarshalJSON is a custom unmarshal function for StructError returning custom errors in special cases

View File

@@ -27,4 +27,4 @@
package version package version
// Client returns the client version as a string. // Client returns the client version as a string.
const Client = "4.6.0" const Client = "4.5.0"

View File

@@ -52,7 +52,7 @@ type AliasesResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r AliasesResp) Inspect() Inspect { func (r AliasesResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -103,7 +103,7 @@ type BulkRespItem struct {
} `json:"error,omitempty"` } `json:"error,omitempty"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r BulkResp) Inspect() Inspect { func (r BulkResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -55,7 +55,7 @@ type CatAliasResp struct {
IsWriteIndex string `json:"is_write_index"` IsWriteIndex string `json:"is_write_index"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatAliasesResp) Inspect() Inspect { func (r CatAliasesResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -59,7 +59,7 @@ type CatAllocationResp struct {
Node string `json:"node"` Node string `json:"node"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatAllocationsResp) Inspect() Inspect { func (r CatAllocationsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -43,7 +43,7 @@ type CatClusterManagerResp struct {
Node string `json:"node"` Node string `json:"node"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatClusterManagersResp) Inspect() Inspect { func (r CatClusterManagersResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -52,7 +52,7 @@ type CatCountResp struct {
Count int `json:"count,string"` Count int `json:"count,string"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatCountsResp) Inspect() Inspect { func (r CatCountsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -55,7 +55,7 @@ type CatFieldDataItemResp struct {
Size string `json:"size"` Size string `json:"size"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatFieldDataResp) Inspect() Inspect { func (r CatFieldDataResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -55,7 +55,7 @@ type CatHealthItemResp struct {
ActiveShardsPercent string `json:"active_shards_percent"` ActiveShardsPercent string `json:"active_shards_percent"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatHealthResp) Inspect() Inspect { func (r CatHealthResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -195,7 +195,7 @@ type CatIndexResp struct {
SearchThrottled bool `json:"search.throttled,string"` SearchThrottled bool `json:"search.throttled,string"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatIndicesResp) Inspect() Inspect { func (r CatIndicesResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -43,7 +43,7 @@ type CatMasterItemResp struct {
Node string `json:"node"` Node string `json:"node"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatMasterResp) Inspect() Inspect { func (r CatMasterResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -47,7 +47,7 @@ type CatNodeAttrsItemResp struct {
Value string `json:"value"` Value string `json:"value"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatNodeAttrsResp) Inspect() Inspect { func (r CatNodeAttrsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -138,7 +138,7 @@ type CatNodesItemResp struct {
SuggestTotal *int `json:"suggest.total,string"` SuggestTotal *int `json:"suggest.total,string"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatNodesResp) Inspect() Inspect { func (r CatNodesResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -43,7 +43,7 @@ type CatPendingTaskResp struct {
Source string `json:"source"` Source string `json:"source"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatPendingTasksResp) Inspect() Inspect { func (r CatPendingTasksResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -44,7 +44,7 @@ type CatPluginResp struct {
Description string `json:"description,omitempty"` Description string `json:"description,omitempty"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatPluginsResp) Inspect() Inspect { func (r CatPluginsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -75,7 +75,7 @@ type CatRecoveryItemResp struct {
TranslogOpsPercent string `json:"translog_ops_percent"` TranslogOpsPercent string `json:"translog_ops_percent"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatRecoveryResp) Inspect() Inspect { func (r CatRecoveryResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -41,7 +41,7 @@ type CatRepositorieResp struct {
Type string `json:"type"` Type string `json:"type"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatRepositoriesResp) Inspect() Inspect { func (r CatRepositoriesResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -64,7 +64,7 @@ type CatSegmentResp struct {
Compound bool `json:"compound,string"` Compound bool `json:"compound,string"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatSegmentsResp) Inspect() Inspect { func (r CatSegmentsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -129,7 +129,7 @@ type CatShardResp struct {
DocsDeleted *int `json:"docs.deleted,string"` DocsDeleted *int `json:"docs.deleted,string"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatShardsResp) Inspect() Inspect { func (r CatShardsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -53,7 +53,7 @@ type CatSnapshotResp struct {
Reason string `json:"reason"` Reason string `json:"reason"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatSnapshotsResp) Inspect() Inspect { func (r CatSnapshotsResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -54,7 +54,7 @@ type CatTaskResp struct {
XOpaqueID string `json:"x_opaque_id"` XOpaqueID string `json:"x_opaque_id"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatTasksResp) Inspect() Inspect { func (r CatTasksResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -54,7 +54,7 @@ type CatTemplateResp struct {
ComposedOf string `json:"composed_of"` ComposedOf string `json:"composed_of"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatTemplatesResp) Inspect() Inspect { func (r CatTemplatesResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -70,7 +70,7 @@ type CatThreadPoolItemResp struct {
TotalWaitTime string `json:"total_wait_time"` TotalWaitTime string `json:"total_wait_time"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r CatThreadPoolResp) Inspect() Inspect { func (r CatThreadPoolResp) Inspect() Inspect {
return Inspect{ return Inspect{
Response: r.response, Response: r.response,

View File

@@ -74,7 +74,7 @@ type ClusterAllocationExplainResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterAllocationExplainResp) Inspect() Inspect { func (r ClusterAllocationExplainResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -46,7 +46,7 @@ type ClusterPutDecommissionResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterPutDecommissionResp) Inspect() Inspect { func (r ClusterPutDecommissionResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -74,7 +74,7 @@ type ClusterDeleteDecommissionResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterDeleteDecommissionResp) Inspect() Inspect { func (r ClusterDeleteDecommissionResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -110,7 +110,7 @@ type ClusterGetDecommissionResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterGetDecommissionResp) Inspect() Inspect { func (r ClusterGetDecommissionResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -63,7 +63,7 @@ type ClusterHealthResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterHealthResp) Inspect() Inspect { func (r ClusterHealthResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -35,7 +35,7 @@ type ClusterPendingTasksResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterPendingTasksResp) Inspect() Inspect { func (r ClusterPendingTasksResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -35,7 +35,7 @@ type ClusterRemoteInfoResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterRemoteInfoResp) Inspect() Inspect { func (r ClusterRemoteInfoResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -40,7 +40,7 @@ type ClusterRerouteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterRerouteResp) Inspect() Inspect { func (r ClusterRerouteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -39,7 +39,7 @@ type ClusterGetSettingsResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterGetSettingsResp) Inspect() Inspect { func (r ClusterGetSettingsResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -70,7 +70,7 @@ type ClusterPutSettingsResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterPutSettingsResp) Inspect() Inspect { func (r ClusterPutSettingsResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -83,7 +83,7 @@ type ClusterStateResp struct {
} `json:"restore"` } `json:"restore"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterStateResp) Inspect() Inspect { func (r ClusterStateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -194,7 +194,6 @@ type ClusterStateMetaDataStream struct {
type ClusterStateRoutingIndex struct { type ClusterStateRoutingIndex struct {
State string `json:"state"` State string `json:"state"`
Primary bool `json:"primary"` Primary bool `json:"primary"`
SearchOnly bool `json:"searchOnly"`
Node *string `json:"node"` Node *string `json:"node"`
RelocatingNode *string `json:"relocating_node"` RelocatingNode *string `json:"relocating_node"`
Shard int `json:"shard"` Shard int `json:"shard"`

View File

@@ -60,7 +60,7 @@ type ClusterStatsResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ClusterStatsResp) Inspect() Inspect { func (r ClusterStatsResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -194,7 +194,6 @@ type ClusterStatsNodes struct {
Master int `json:"master"` Master int `json:"master"`
RemoteClusterClient int `json:"remote_cluster_client"` RemoteClusterClient int `json:"remote_cluster_client"`
Search int `json:"search"` Search int `json:"search"`
Warm int `json:"warm"`
} `json:"count"` } `json:"count"`
Versions []string `json:"versions"` Versions []string `json:"versions"`
Os struct { Os struct {

View File

@@ -41,7 +41,7 @@ type ComponentTemplateCreateResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ComponentTemplateCreateResp) Inspect() Inspect { func (r ComponentTemplateCreateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type ComponentTemplateDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ComponentTemplateDeleteResp) Inspect() Inspect { func (r ComponentTemplateDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -47,7 +47,7 @@ type ComponentTemplateGetResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r ComponentTemplateGetResp) Inspect() Inspect { func (r ComponentTemplateGetResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type DanglingDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DanglingDeleteResp) Inspect() Inspect { func (r DanglingDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -55,7 +55,7 @@ type DanglingGetResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DanglingGetResp) Inspect() Inspect { func (r DanglingGetResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type DanglingImportResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DanglingImportResp) Inspect() Inspect { func (r DanglingImportResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type DataStreamCreateResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DataStreamCreateResp) Inspect() Inspect { func (r DataStreamCreateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type DataStreamDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DataStreamDeleteResp) Inspect() Inspect { func (r DataStreamDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -48,7 +48,7 @@ type DataStreamGetResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DataStreamGetResp) Inspect() Inspect { func (r DataStreamGetResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -63,7 +63,7 @@ type DataStreamStatsResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DataStreamStatsResp) Inspect() Inspect { func (r DataStreamStatsResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -60,7 +60,7 @@ type DocumentCreateResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentCreateResp) Inspect() Inspect { func (r DocumentCreateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -56,7 +56,7 @@ type DocumentDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentDeleteResp) Inspect() Inspect { func (r DocumentDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -58,7 +58,7 @@ type DocumentDeleteByQueryResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentDeleteByQueryResp) Inspect() Inspect { func (r DocumentDeleteByQueryResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -91,7 +91,7 @@ type DocumentDeleteByQueryRethrottleResourceInfo struct {
MemoryInBytes int `json:"memory_in_bytes"` MemoryInBytes int `json:"memory_in_bytes"`
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentDeleteByQueryRethrottleResp) Inspect() Inspect { func (r DocumentDeleteByQueryRethrottleResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -46,7 +46,7 @@ type DocumentExplainResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentExplainResp) Inspect() Inspect { func (r DocumentExplainResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -48,7 +48,7 @@ type DocumentGetResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentGetResp) Inspect() Inspect { func (r DocumentGetResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -40,7 +40,7 @@ type DocumentSourceResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r DocumentSourceResp) Inspect() Inspect { func (r DocumentSourceResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -75,7 +75,7 @@ type IndexResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndexResp) Inspect() Inspect { func (r IndexResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -41,7 +41,7 @@ type IndexTemplateCreateResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndexTemplateCreateResp) Inspect() Inspect { func (r IndexTemplateCreateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type IndexTemplateDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndexTemplateDeleteResp) Inspect() Inspect { func (r IndexTemplateDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -40,7 +40,7 @@ type IndexTemplateGetResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndexTemplateGetResp) Inspect() Inspect { func (r IndexTemplateGetResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -50,7 +50,7 @@ type IndexTemplateSimulateResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndexTemplateSimulateResp) Inspect() Inspect { func (r IndexTemplateSimulateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -50,7 +50,7 @@ type IndexTemplateSimulateIndexResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndexTemplateSimulateIndexResp) Inspect() Inspect { func (r IndexTemplateSimulateIndexResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -98,7 +98,7 @@ type AliasDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r AliasDeleteResp) Inspect() Inspect { func (r AliasDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -140,7 +140,7 @@ type AliasGetResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r AliasGetResp) Inspect() Inspect { func (r AliasGetResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }
@@ -179,7 +179,7 @@ type AliasPutResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r AliasPutResp) Inspect() Inspect { func (r AliasPutResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -73,7 +73,7 @@ type IndicesAnalyzeResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesAnalyzeResp) Inspect() Inspect { func (r IndicesAnalyzeResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -56,7 +56,7 @@ type IndicesBlockResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesBlockResp) Inspect() Inspect { func (r IndicesBlockResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -53,7 +53,7 @@ type IndicesClearCacheResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesClearCacheResp) Inspect() Inspect { func (r IndicesClearCacheResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -44,7 +44,7 @@ type IndicesCloneResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesCloneResp) Inspect() Inspect { func (r IndicesCloneResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -45,7 +45,7 @@ type IndicesCloseResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesCloseResp) Inspect() Inspect { func (r IndicesCloseResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -56,7 +56,7 @@ type IndicesCountResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesCountResp) Inspect() Inspect { func (r IndicesCountResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -41,7 +41,7 @@ type IndicesCreateResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesCreateResp) Inspect() Inspect { func (r IndicesCreateResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -38,7 +38,7 @@ type IndicesDeleteResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesDeleteResp) Inspect() Inspect { func (r IndicesDeleteResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -56,7 +56,7 @@ type IndicesFieldCapsResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesFieldCapsResp) Inspect() Inspect { func (r IndicesFieldCapsResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

View File

@@ -52,7 +52,7 @@ type IndicesFlushResp struct {
response *opensearch.Response response *opensearch.Response
} }
// Inspect returns the Inspect type containing the raw *opensearch.Response // Inspect returns the Inspect type containing the raw *opensearch.Reponse
func (r IndicesFlushResp) Inspect() Inspect { func (r IndicesFlushResp) Inspect() Inspect {
return Inspect{Response: r.response} return Inspect{Response: r.response}
} }

Some files were not shown because too many files have changed in this diff Show More