Created
April 22, 2024 14:09
-
-
Save rh-operator-bundle-bot/2a10264db2e700c4e687025df9ae30c8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"certified": false, | |
"deleted": false, | |
"docker_image_digest": "sha256:316c03babd6d13503ff41a9afd7cfddc9ac87b9d1da3023879ce22c436ed4806", | |
"docker_image_id": "sha256:fb255b86988c898749110cbca30e917a6a3e83eadec79bf3242afbb44d677551", | |
"image_id": "sha256:316c03babd6d13503ff41a9afd7cfddc9ac87b9d1da3023879ce22c436ed4806", | |
"parsed_data": { | |
"architecture": "amd64", | |
"created": "2024-04-22 12:49:06.861467188 +0000 UTC", | |
"image_id": "sha256:316c03babd6d13503ff41a9afd7cfddc9ac87b9d1da3023879ce22c436ed4806", | |
"labels": [ | |
{ | |
"name": "com.redhat.openshift.versions", | |
"value": "v4.11-v4.14" | |
}, | |
{ | |
"name": "operators.operatorframework.io.bundle.channels.v1", | |
"value": "alpha" | |
}, | |
{ | |
"name": "operators.operatorframework.io.bundle.manifests.v1", | |
"value": "manifests/" | |
}, | |
{ | |
"name": "operators.operatorframework.io.bundle.mediatype.v1", | |
"value": "registry+v1" | |
}, | |
{ | |
"name": "operators.operatorframework.io.bundle.metadata.v1", | |
"value": "metadata/" | |
}, | |
{ | |
"name": "operators.operatorframework.io.test.mediatype.v1", | |
"value": "scorecard+v1" | |
}, | |
{ | |
"name": "io.buildah.version", | |
"value": "1.26.2" | |
}, | |
{ | |
"name": "operators.operatorframework.io.bundle.package.v1", | |
"value": "new-test-operator" | |
}, | |
{ | |
"name": "operators.operatorframework.io.metrics.builder", | |
"value": "operator-sdk-v1.28.1" | |
}, | |
{ | |
"name": "operators.operatorframework.io.metrics.mediatype.v1", | |
"value": "metrics+v1" | |
}, | |
{ | |
"name": "operators.operatorframework.io.metrics.project_layout", | |
"value": "ansible.sdk.operatorframework.io/v1" | |
}, | |
{ | |
"name": "operators.operatorframework.io.test.config.v1", | |
"value": "tests/scorecard/" | |
} | |
], | |
"layers": [ | |
"sha256:0eeff9d4126122d7d8a4c1d24f9905b66b33a373324692960a9d0b0baba8e6ad" | |
], | |
"os": "linux", | |
"size": 426, | |
"uncompressed_layer_sizes": [ | |
{ | |
"layer_id": "sha256:69566cfd6f4025bbfa842aaf614ac721449f56cbc3dd08f8e9e26365b7892593", | |
"size_bytes": 30208 | |
} | |
] | |
}, | |
"architecture": "amd64", | |
"raw_config": "{\"created\":\"2024-04-22T12:49:06.861467188Z\",\"container\":\"9461b8587f76873ff8338053f43cb8a960c1640c444f0abc62d1c6a0b8d778c3\",\"container_config\":{\"Hostname\":\"70a0309ff483\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[],\"Image\":\"\",\"Volumes\":{},\"WorkingDir\":\"\",\"Entrypoint\":[],\"OnBuild\":[],\"Labels\":{\"com.redhat.openshift.versions\":\"v4.11-v4.14\",\"io.buildah.version\":\"1.26.2\",\"operators.operatorframework.io.bundle.channels.v1\":\"alpha\",\"operators.operatorframework.io.bundle.manifests.v1\":\"manifests/\",\"operators.operatorframework.io.bundle.mediatype.v1\":\"registry+v1\",\"operators.operatorframework.io.bundle.metadata.v1\":\"metadata/\",\"operators.operatorframework.io.bundle.package.v1\":\"new-test-operator\",\"operators.operatorframework.io.metrics.builder\":\"operator-sdk-v1.28.1\",\"operators.operatorframework.io.metrics.mediatype.v1\":\"metrics+v1\",\"operators.operatorframework.io.metrics.project_layout\":\"ansible.sdk.operatorframework.io/v1\",\"operators.operatorframework.io.test.config.v1\":\"tests/scorecard/\",\"operators.operatorframework.io.test.mediatype.v1\":\"scorecard+v1\"}},\"config\":{\"Hostname\":\"70a0309ff483\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[],\"Image\":\"\",\"Volumes\":{},\"WorkingDir\":\"\",\"Entrypoint\":[],\"OnBuild\":[],\"Labels\":{\"com.redhat.openshift.versions\":\"v4.11-v4.14\",\"io.buildah.version\":\"1.26.2\",\"operators.operatorframework.io.bundle.channels.v1\":\"alpha\",\"operators.operatorframework.io.bundle.manifests.v1\":\"manifests/\",\"operators.operatorframework.io.bundle.mediatype.v1\":\"registry+v1\",\"operators.operatorframework.io.bundle.metadata.v1\":\"metadata/\",\"operators.operatorframework.io.bundle.package.v1\":\"new-test-operator\",\"operators.operatorframework.io.metrics.builder\":\"operator-sdk-v1.28.1\",\"operators.operatorframework.io.metrics.mediatype.v1\":\"metrics+v1\",\"operators.operatorframework.io.metrics.project_layout\":\"ansible.sdk.operatorframework.io/v1\",\"operators.operatorframework.io.test.config.v1\":\"tests/scorecard/\",\"operators.operatorframework.io.test.mediatype.v1\":\"scorecard+v1\"}},\"architecture\":\"amd64\",\"os\":\"linux\",\"rootfs\":{\"type\":\"layers\",\"diff_ids\":[\"sha256:69566cfd6f4025bbfa842aaf614ac721449f56cbc3dd08f8e9e26365b7892593\"]},\"history\":[{\"created\":\"2024-04-22T12:49:06.619949663Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.bundle.mediatype.v1='registry+v1'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.619977902Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.bundle.manifests.v1='manifests/'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620006954Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.bundle.metadata.v1='metadata/'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620037077Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.bundle.package.v1='new-test-operator'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620075702Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.bundle.channels.v1='alpha'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620104015Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.metrics.builder='operator-sdk-v1.28.1'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620131662Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.metrics.mediatype.v1='metrics+v1'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620173456Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.metrics.project_layout='ansible.sdk.operatorframework.io/v1'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620206712Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.test.mediatype.v1='scorecard+v1'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620231224Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL operators.operatorframework.io.test.config.v1='tests/scorecard/'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.620262442Z\",\"created_by\":\"/bin/sh -c #(nop) LABEL com.redhat.openshift.versions='v4.11-v4.14'\",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.732956562Z\",\"created_by\":\"/bin/sh -c #(nop) COPY dir:46f14cd4508c01467d54ff01bf59e6f93a8b1acd66dc26763fd0e98c4963600e in /manifests/ \",\"empty_layer\":true},{\"created\":\"2024-04-22T12:49:06.863129155Z\",\"created_by\":\"/bin/sh -c #(nop) COPY dir:02f8ecdbaa81c332ae9538b19136e627dcfd00c95b1a3622b665ba8db47f25e9 in /metadata/ \"}]}", | |
"repositories": [ | |
{ | |
"published": false, | |
"push_date": "2024-04-22T12:59:36Z", | |
"registry": "quay.io", | |
"repository": "operator-pipeline-stage/new-test-operator", | |
"tags": [ | |
{ | |
"added_date": "2024-04-22T12:59:36Z", | |
"name": "0.0.2" | |
} | |
] | |
} | |
], | |
"sum_layer_size_bytes": 30208, | |
"uncompressed_top_layer_id": "sha256:69566cfd6f4025bbfa842aaf614ac721449f56cbc3dd08f8e9e26365b7892593" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54058d86baa255ee1954da8656a85f7d ./manifests/memcached-operator-controller-manager-metrics-service_v1_service.yaml | |
7001c65679b25f5c948408590f6cc028 ./manifests/cache.quay.io_memcacheds.yaml | |
b5c26dc907ee9f529dff201af40c9ff4 ./metadata/annotations.yaml | |
bf6afd247d383f3b7a3333b336edd4e5 ./manifests/memcached-operator.clusterserviceversion.yaml | |
e3ef8725f51d6a0ccadac5aabc353211 ./manifests/memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"image": "quay.io/operator-pipeline-stage/new-test-operator:0.0.2", | |
"passed": false, | |
"certification_hash": "d41d8cd98f00b204e9800998ecf8427e", | |
"test_library": { | |
"name": "github.com/redhat-openshift-ecosystem/openshift-preflight", | |
"version": "1.9.1", | |
"commit": "f19c2a2f587f9890d45ef8b9c13503a4c03f3218" | |
}, | |
"results": { | |
"passed": [ | |
{ | |
"name": "ValidateOperatorBundle", | |
"elapsed_time": 11, | |
"description": "Validating Bundle image that checks if it can validate the content and format of the operator bundle" | |
}, | |
{ | |
"name": "RequiredAnnotations", | |
"elapsed_time": 10, | |
"description": "Checks that the CSV has all of the required feature annotations." | |
} | |
], | |
"failed": [], | |
"errors": [ | |
{ | |
"name": "ScorecardBasicSpecCheck", | |
"elapsed_time": 240213, | |
"description": "Check to make sure that all CRs have a spec block.", | |
"help": "There was a fatal error while running operator-sdk scorecard tests. Please see the preflight log for details. If necessary, set logging to be more verbose." | |
}, | |
{ | |
"name": "ScorecardOlmSuiteCheck", | |
"elapsed_time": 240209, | |
"description": "Operator-sdk scorecard OLM Test Suite Check", | |
"help": "There was a fatal error while running operator-sdk scorecard tests. Please see the preflight log for details. If necessary, set logging to be more verbose." | |
}, | |
{ | |
"name": "DeployableByOLM", | |
"elapsed_time": 734, | |
"description": "Checking if the operator could be deployed by OLM", | |
"help": "It is required that your operator could be deployed by OLM" | |
} | |
] | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
time="2024-04-22T12:59:34Z" level=debug msg="config file not found, proceeding without it" | |
time="2024-04-22T12:59:34Z" level=info msg="certification library version" version="1.9.1 <commit: f19c2a2f587f9890d45ef8b9c13503a4c03f3218>" | |
time="2024-04-22T12:59:34Z" level=info msg="target image" image="quay.io/operator-pipeline-stage/new-test-operator:0.0.2" | |
time="2024-04-22T12:59:34Z" level=debug msg="pulling image from target registry" | |
time="2024-04-22T12:59:34Z" level=trace msg="entering preflight keychain Resolve" | |
time="2024-04-22T12:59:35Z" level=debug msg="created temporary directory" path=/tmp/preflight-1300942344 | |
time="2024-04-22T12:59:35Z" level=debug msg="exporting and flattening image" | |
time="2024-04-22T12:59:35Z" level=debug msg="extracting container filesystem" path=/tmp/preflight-1300942344/fs | |
time="2024-04-22T12:59:35Z" level=debug msg="writing container filesystem" outputDirectory=/tmp/preflight-1300942344/fs | |
time="2024-04-22T12:59:36Z" level=trace msg="image config written to disk" filename=/tmp/tmp.lLG6MOSevB/artifacts/cert-image.json | |
time="2024-04-22T12:59:36Z" level=debug msg="fetching operator version and openshift-apiserver version" host="https://api.rhoe-ocp-4-14-amd64-aws-us-west-1-dxk2n.certification-pipeline.opdev.io:6443" version="[{\"name\":\"operator\",\"version\":\"4.14.20\"},{\"name\":\"openshift-apiserver\",\"version\":\"4.14.20\"}]" | |
time="2024-04-22T12:59:36Z" level=debug msg="executing checks" | |
time="2024-04-22T12:59:36Z" level=debug msg="running check" check=ScorecardBasicSpecCheck | |
time="2024-04-22T12:59:36Z" level=trace msg="running operator-sdk scorecard check" image="quay.io/operator-pipeline-stage/new-test-operator:0.0.2" | |
time="2024-04-22T12:59:36Z" level=trace msg="created temporary kubeconfig for use with scorecard at path" name=/tmp/2964629040 | |
time="2024-04-22T12:59:36Z" level=info msg="running scorecard with the following invocation" args="[\"operator-sdk\",\"scorecard\",\"--output\",\"json\",\"--selector=test=basic-check-spec-test\",\"--kubeconfig\",\"/tmp/2964629040\",\"--wait-time\",\"240s\",\"--namespace\",\"default\",\"--service-account\",\"default\",\"--config\",\"/tmp/scorecard-test-config-3494585179.yaml\",\"--verbose\",\"/tmp/preflight-1300942344/fs\"]" | |
time="2024-04-22T13:03:36Z" level=debug msg="operator-sdk scorecard failed to run properly" | |
time="2024-04-22T13:03:36Z" level=debug msg="stderr output" stderr="time=\"2024-04-22T12:59:36Z\" level=debug msg=\"Debug logging is set\"\nError: error running tests context deadline exceeded\nUsage:\n operator-sdk scorecard [flags]\n\nFlags:\n -c, --config string path to scorecard config file\n -h, --help help for scorecard\n --kubeconfig string kubeconfig path\n -L, --list Option to enable listing which tests are run\n -n, --namespace string namespace to run the test images in\n -o, --output string Output format for results. Valid values: text, json, xunit (default \"text\")\n --pod-security string option to run scorecard with legacy pod security context (default \"legacy\")\n -l, --selector string label selector to determine which tests are run\n -s, --service-account string Service account to use for tests (default \"default\")\n -x, --skip-cleanup Disable resource cleanup after tests are run\n -b, --storage-image string Storage image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-storage@sha256:a3bfda71281393c7794cabdd39c563fb050d3020fd0b642ea164646bdd39a0e2\")\n -t, --test-output string Test output directory. (default \"test-output\")\n -u, --untar-image string Untar image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-untar@sha256:2e728c5e67a7f4dec0df157a322dd5671212e8ae60f69137463bd4fdfbff8747\")\n -w, --wait-time duration seconds to wait for tests to complete. Example: 35s (default 30s)\n\nGlobal Flags:\n --plugins strings plugin keys to be used for this subcommand execution\n --verbose Enable verbose logging\n\ntime=\"2024-04-22T13:03:36Z\" level=fatal msg=\"error running tests context deadline exceeded\"\n" | |
time="2024-04-22T13:03:36Z" level=info msg="check completed" check=ScorecardBasicSpecCheck err="failed to run operator-sdk scorecard: exit status 1" result=ERROR | |
time="2024-04-22T13:03:36Z" level=debug msg="running check" check=ScorecardOlmSuiteCheck | |
time="2024-04-22T13:03:36Z" level=trace msg="running operator-sdk scorecard check" image="quay.io/operator-pipeline-stage/new-test-operator:0.0.2" | |
time="2024-04-22T13:03:36Z" level=trace msg="created temporary kubeconfig for use with scorecard at path" name=/tmp/3969168419 | |
time="2024-04-22T13:03:36Z" level=info msg="running scorecard with the following invocation" args="[\"operator-sdk\",\"scorecard\",\"--output\",\"json\",\"--selector=suite=olm\",\"--kubeconfig\",\"/tmp/3969168419\",\"--wait-time\",\"240s\",\"--namespace\",\"default\",\"--service-account\",\"default\",\"--config\",\"/tmp/scorecard-test-config-839182970.yaml\",\"--verbose\",\"/tmp/preflight-1300942344/fs\"]" | |
time="2024-04-22T13:07:37Z" level=debug msg="operator-sdk scorecard failed to run properly" | |
time="2024-04-22T13:07:37Z" level=debug msg="stderr output" stderr="time=\"2024-04-22T13:03:36Z\" level=debug msg=\"Debug logging is set\"\nError: error running tests context deadline exceeded\nUsage:\n operator-sdk scorecard [flags]\n\nFlags:\n -c, --config string path to scorecard config file\n -h, --help help for scorecard\n --kubeconfig string kubeconfig path\n -L, --list Option to enable listing which tests are run\n -n, --namespace string namespace to run the test images in\n -o, --output string Output format for results. Valid values: text, json, xunit (default \"text\")\n --pod-security string option to run scorecard with legacy pod security context (default \"legacy\")\n -l, --selector string label selector to determine which tests are run\n -s, --service-account string Service account to use for tests (default \"default\")\n -x, --skip-cleanup Disable resource cleanup after tests are run\n -b, --storage-image string Storage image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-storage@sha256:a3bfda71281393c7794cabdd39c563fb050d3020fd0b642ea164646bdd39a0e2\")\n -t, --test-output string Test output directory. (default \"test-output\")\n -u, --untar-image string Untar image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-untar@sha256:2e728c5e67a7f4dec0df157a322dd5671212e8ae60f69137463bd4fdfbff8747\")\n -w, --wait-time duration seconds to wait for tests to complete. Example: 35s (default 30s)\n\nGlobal Flags:\n --plugins strings plugin keys to be used for this subcommand execution\n --verbose Enable verbose logging\n\ntime=\"2024-04-22T13:07:37Z\" level=fatal msg=\"error running tests context deadline exceeded\"\n" | |
time="2024-04-22T13:07:37Z" level=info msg="check completed" check=ScorecardOlmSuiteCheck err="failed to run operator-sdk scorecard: exit status 1" result=ERROR | |
time="2024-04-22T13:07:37Z" level=debug msg="running check" check=DeployableByOLM | |
time="2024-04-22T13:07:37Z" level=trace msg="reading annotations file from the bundle" | |
time="2024-04-22T13:07:37Z" level=debug msg="image extraction directory" directory=/tmp/preflight-1300942344/fs | |
time="2024-04-22T13:07:37Z" level=debug msg="running with additional checks enabled because of the OpenShift version detected" version=4.14 | |
time="2024-04-22T13:07:37Z" level=info msg="check completed" check=DeployableByOLM err="could not list image streams: failed to get API group resources: unable to retrieve the complete list of server APIs: image.openshift.io/v1: the server is currently unable to handle the request" result=ERROR | |
time="2024-04-22T13:07:37Z" level=debug msg="running check" check=ValidateOperatorBundle | |
time="2024-04-22T13:07:37Z" level=trace msg="reading annotations file from the bundle" | |
time="2024-04-22T13:07:37Z" level=debug msg="image extraction directory" directory=/tmp/preflight-1300942344/fs | |
time="2024-04-22T13:07:37Z" level=debug msg="running with additional checks enabled because of the OpenShift version detected" version=4.14 | |
time="2024-04-22T13:07:37Z" level=info msg="warning: Warning: Value cache.quay.io/v1alpha1, Kind=Memcached: provided API should have an example annotation" | |
time="2024-04-22T13:07:37Z" level=info msg="check completed" check=ValidateOperatorBundle result=PASSED | |
time="2024-04-22T13:07:37Z" level=debug msg="running check" check=BundleImageRefsAreCertified | |
time="2024-04-22T13:07:37Z" level=info msg="Check BundleImageRefsAreCertified is not currently being enforced." | |
time="2024-04-22T13:07:38Z" level=info msg="warning: image not found in Pyxis, therefore it is not certified" digest="sha256:d4883d7c622683b3319b5e6b3a7edfbf2594c18060131a8bf64504805f875522" | |
time="2024-04-22T13:07:38Z" level=info msg="warning: image not found in Pyxis, therefore it is not certified" digest="sha256:ebbfedd514944e1a2a140f785f900d482eecbfff2e3d67bf76f6ee54569a49bc" | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=BundleImageRefsAreCertified result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=SecurityContextConstraintsInCSV | |
time="2024-04-22T13:07:38Z" level=info msg="Check SecurityContextConstraintsInCSV is not currently being enforced." | |
time="2024-04-22T13:07:38Z" level=info msg="No custom security context constraint was detected in the CSV. The default restricted SCC will be used." | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=SecurityContextConstraintsInCSV result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=AllImageRefsInRelatedImages | |
time="2024-04-22T13:07:38Z" level=info msg="Check AllImageRefsInRelatedImages is not currently being enforced." | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=AllImageRefsInRelatedImages result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=FollowsRestrictedNetworkEnablementGuidelines | |
time="2024-04-22T13:07:38Z" level=info msg="Check FollowsRestrictedNetworkEnablementGuidelines is not currently being enforced." | |
time="2024-04-22T13:07:38Z" level=info msg="this operator does not indicate it supports installation into restricted networks. This is safe to ignore if you are not intending to deploy in these environments." | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=FollowsRestrictedNetworkEnablementGuidelines result=FAILED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=RequiredAnnotations | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=RequiredAnnotations result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="md5 sum" md5sum=d41d8cd98f00b204e9800998ecf8427e | |
time="2024-04-22T13:07:38Z" level=info msg="Preflight result: FAILED" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
time="2024-04-22T12:59:34Z" level=debug msg="config file not found, proceeding without it" | |
time="2024-04-22T12:59:34Z" level=info msg="certification library version" version="1.9.1 <commit: f19c2a2f587f9890d45ef8b9c13503a4c03f3218>" | |
time="2024-04-22T12:59:34Z" level=info msg="target image" image="quay.io/operator-pipeline-stage/new-test-operator:0.0.2" | |
time="2024-04-22T12:59:34Z" level=debug msg="pulling image from target registry" | |
time="2024-04-22T12:59:34Z" level=trace msg="entering preflight keychain Resolve" | |
time="2024-04-22T12:59:35Z" level=debug msg="created temporary directory" path=/tmp/preflight-1300942344 | |
time="2024-04-22T12:59:35Z" level=debug msg="exporting and flattening image" | |
time="2024-04-22T12:59:35Z" level=debug msg="extracting container filesystem" path=/tmp/preflight-1300942344/fs | |
time="2024-04-22T12:59:35Z" level=debug msg="writing container filesystem" outputDirectory=/tmp/preflight-1300942344/fs | |
time="2024-04-22T12:59:36Z" level=trace msg="image config written to disk" filename=/tmp/tmp.lLG6MOSevB/artifacts/cert-image.json | |
time="2024-04-22T12:59:36Z" level=debug msg="fetching operator version and openshift-apiserver version" host="https://api.rhoe-ocp-4-14-amd64-aws-us-west-1-dxk2n.certification-pipeline.opdev.io:6443" version="[{\"name\":\"operator\",\"version\":\"4.14.20\"},{\"name\":\"openshift-apiserver\",\"version\":\"4.14.20\"}]" | |
time="2024-04-22T12:59:36Z" level=debug msg="executing checks" | |
time="2024-04-22T12:59:36Z" level=debug msg="running check" check=ScorecardBasicSpecCheck | |
time="2024-04-22T12:59:36Z" level=trace msg="running operator-sdk scorecard check" image="quay.io/operator-pipeline-stage/new-test-operator:0.0.2" | |
time="2024-04-22T12:59:36Z" level=trace msg="created temporary kubeconfig for use with scorecard at path" name=/tmp/2964629040 | |
time="2024-04-22T12:59:36Z" level=info msg="running scorecard with the following invocation" args="[\"operator-sdk\",\"scorecard\",\"--output\",\"json\",\"--selector=test=basic-check-spec-test\",\"--kubeconfig\",\"/tmp/2964629040\",\"--wait-time\",\"240s\",\"--namespace\",\"default\",\"--service-account\",\"default\",\"--config\",\"/tmp/scorecard-test-config-3494585179.yaml\",\"--verbose\",\"/tmp/preflight-1300942344/fs\"]" | |
time="2024-04-22T13:03:36Z" level=debug msg="operator-sdk scorecard failed to run properly" | |
time="2024-04-22T13:03:36Z" level=debug msg="stderr output" stderr="time=\"2024-04-22T12:59:36Z\" level=debug msg=\"Debug logging is set\"\nError: error running tests context deadline exceeded\nUsage:\n operator-sdk scorecard [flags]\n\nFlags:\n -c, --config string path to scorecard config file\n -h, --help help for scorecard\n --kubeconfig string kubeconfig path\n -L, --list Option to enable listing which tests are run\n -n, --namespace string namespace to run the test images in\n -o, --output string Output format for results. Valid values: text, json, xunit (default \"text\")\n --pod-security string option to run scorecard with legacy pod security context (default \"legacy\")\n -l, --selector string label selector to determine which tests are run\n -s, --service-account string Service account to use for tests (default \"default\")\n -x, --skip-cleanup Disable resource cleanup after tests are run\n -b, --storage-image string Storage image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-storage@sha256:a3bfda71281393c7794cabdd39c563fb050d3020fd0b642ea164646bdd39a0e2\")\n -t, --test-output string Test output directory. (default \"test-output\")\n -u, --untar-image string Untar image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-untar@sha256:2e728c5e67a7f4dec0df157a322dd5671212e8ae60f69137463bd4fdfbff8747\")\n -w, --wait-time duration seconds to wait for tests to complete. Example: 35s (default 30s)\n\nGlobal Flags:\n --plugins strings plugin keys to be used for this subcommand execution\n --verbose Enable verbose logging\n\ntime=\"2024-04-22T13:03:36Z\" level=fatal msg=\"error running tests context deadline exceeded\"\n" | |
time="2024-04-22T13:03:36Z" level=info msg="check completed" check=ScorecardBasicSpecCheck err="failed to run operator-sdk scorecard: exit status 1" result=ERROR | |
time="2024-04-22T13:03:36Z" level=debug msg="running check" check=ScorecardOlmSuiteCheck | |
time="2024-04-22T13:03:36Z" level=trace msg="running operator-sdk scorecard check" image="quay.io/operator-pipeline-stage/new-test-operator:0.0.2" | |
time="2024-04-22T13:03:36Z" level=trace msg="created temporary kubeconfig for use with scorecard at path" name=/tmp/3969168419 | |
time="2024-04-22T13:03:36Z" level=info msg="running scorecard with the following invocation" args="[\"operator-sdk\",\"scorecard\",\"--output\",\"json\",\"--selector=suite=olm\",\"--kubeconfig\",\"/tmp/3969168419\",\"--wait-time\",\"240s\",\"--namespace\",\"default\",\"--service-account\",\"default\",\"--config\",\"/tmp/scorecard-test-config-839182970.yaml\",\"--verbose\",\"/tmp/preflight-1300942344/fs\"]" | |
time="2024-04-22T13:07:37Z" level=debug msg="operator-sdk scorecard failed to run properly" | |
time="2024-04-22T13:07:37Z" level=debug msg="stderr output" stderr="time=\"2024-04-22T13:03:36Z\" level=debug msg=\"Debug logging is set\"\nError: error running tests context deadline exceeded\nUsage:\n operator-sdk scorecard [flags]\n\nFlags:\n -c, --config string path to scorecard config file\n -h, --help help for scorecard\n --kubeconfig string kubeconfig path\n -L, --list Option to enable listing which tests are run\n -n, --namespace string namespace to run the test images in\n -o, --output string Output format for results. Valid values: text, json, xunit (default \"text\")\n --pod-security string option to run scorecard with legacy pod security context (default \"legacy\")\n -l, --selector string label selector to determine which tests are run\n -s, --service-account string Service account to use for tests (default \"default\")\n -x, --skip-cleanup Disable resource cleanup after tests are run\n -b, --storage-image string Storage image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-storage@sha256:a3bfda71281393c7794cabdd39c563fb050d3020fd0b642ea164646bdd39a0e2\")\n -t, --test-output string Test output directory. (default \"test-output\")\n -u, --untar-image string Untar image to be used by the Scorecard pod (default \"quay.io/operator-framework/scorecard-untar@sha256:2e728c5e67a7f4dec0df157a322dd5671212e8ae60f69137463bd4fdfbff8747\")\n -w, --wait-time duration seconds to wait for tests to complete. Example: 35s (default 30s)\n\nGlobal Flags:\n --plugins strings plugin keys to be used for this subcommand execution\n --verbose Enable verbose logging\n\ntime=\"2024-04-22T13:07:37Z\" level=fatal msg=\"error running tests context deadline exceeded\"\n" | |
time="2024-04-22T13:07:37Z" level=info msg="check completed" check=ScorecardOlmSuiteCheck err="failed to run operator-sdk scorecard: exit status 1" result=ERROR | |
time="2024-04-22T13:07:37Z" level=debug msg="running check" check=DeployableByOLM | |
[controller-runtime] log.SetLogger(...) was never called; logs will not be displayed. | |
Detected at: | |
> goroutine 1 [running]: | |
> runtime/debug.Stack() | |
> /usr/local/go/src/runtime/debug/stack.go:24 +0x5e | |
> sigs.k8s.io/controller-runtime/pkg/log.eventuallyFulfillRoot() | |
> /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.17.2/pkg/log/log.go:60 +0xcd | |
> sigs.k8s.io/controller-runtime/pkg/log.(*delegatingLogSink).WithName(0xc00042ba40, {0x20e1ec6, 0x14}) | |
> /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.17.2/pkg/log/deleg.go:147 +0x45 | |
> github.com/go-logr/logr.Logger.WithName({{0x2486a28, 0xc00042ba40}, 0x0}, {0x20e1ec6?, 0x155a686?}) | |
> /go/pkg/mod/github.com/go-logr/logr@v1.4.1/logr.go:345 +0x3d | |
> sigs.k8s.io/controller-runtime/pkg/client.newClient(0xc000853e20?, {0x0, 0xc000632770, {0x0, 0x0}, 0x0, {0x0, 0x0}, 0x0}) | |
> /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.17.2/pkg/client/client.go:129 +0xec | |
> sigs.k8s.io/controller-runtime/pkg/client.New(0x2480aa0?, {0x0, 0xc000632770, {0x0, 0x0}, 0x0, {0x0, 0x0}, 0x0}) | |
> /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.17.2/pkg/client/client.go:110 +0x7d | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/internal/policy/operator.(*DeployableByOlmCheck).initClient(0xc0008a1620) | |
> /go/src/preflight/internal/policy/operator/deployable_by_olm.go:80 +0x119 | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/internal/policy/operator.(*DeployableByOlmCheck).Validate(0xc0008a1620, {0x2480aa0?, 0xc0008c81e0}, {{0x7ffdc545193a, 0x37}, {0xc0007d44e0, 0x1c}, {0x248d1d0, 0xc00068a120}, {0x7ffdc5451942, ...}, ...}) | |
> /go/src/preflight/internal/policy/operator/deployable_by_olm.go:116 +0x90 | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/internal/engine.(*craneEngine).ExecuteChecks(0xc0007acea0, {0x2480aa0, 0xc0008c81e0}) | |
> /go/src/preflight/internal/engine/engine.go:229 +0x166e | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/operator.operatorCheck.Run({{0x7ffdc545193a, 0x37}, {0xc0008e6000, 0x236f, 0x2500}, {0xc000062010, 0x56}, {0x0, 0x0}, {0x20cb1e2, ...}, ...}, ...) | |
> /go/src/preflight/operator/check_operator.go:64 +0x2cb | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/internal/cli.RunPreflight({0x2480aa0, 0xc0008c81e0}, 0xc0008a41c0, {0x10?, 0x20?}, {0x2471710, 0xc0005a7200}, {0x2471590, 0xc00009c3d0}, {0x2461260, ...}) | |
> /go/src/preflight/internal/cli/cli.go:59 +0x5b0 | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/cmd/preflight/cmd.checkOperatorRunE(0xc0008ba600, {0xc000a90c00, 0x1, 0x0?}, 0x222b250) | |
> /go/src/preflight/cmd/preflight/cmd/check_operator.go:121 +0x53a | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/cmd/preflight/cmd.checkOperatorCmd.func1(0xc0008ba600?, {0xc000a90c00?, 0x4?, 0x20c7c28?}) | |
> /go/src/preflight/cmd/preflight/cmd/check_operator.go:31 +0x1c | |
> github.com/spf13/cobra.(*Command).execute(0xc0008ba600, {0xc000a90bd0, 0x1, 0x1}) | |
> /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:983 +0xabc | |
> github.com/spf13/cobra.(*Command).ExecuteC(0xc0008ba000) | |
> /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1115 +0x3ff | |
> github.com/spf13/cobra.(*Command).Execute(...) | |
> /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1039 | |
> github.com/spf13/cobra.(*Command).ExecuteContext(...) | |
> /go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1032 | |
> github.com/redhat-openshift-ecosystem/openshift-preflight/cmd/preflight/cmd.Execute() | |
> /go/src/preflight/cmd/preflight/cmd/root.go:55 +0x4d | |
> main.main() | |
> /go/src/preflight/cmd/preflight/main.go:10 +0x13 | |
time="2024-04-22T13:07:37Z" level=trace msg="reading annotations file from the bundle" | |
time="2024-04-22T13:07:37Z" level=debug msg="image extraction directory" directory=/tmp/preflight-1300942344/fs | |
time="2024-04-22T13:07:37Z" level=debug msg="running with additional checks enabled because of the OpenShift version detected" version=4.14 | |
time="2024-04-22T13:07:37Z" level=info msg="check completed" check=DeployableByOLM err="could not list image streams: failed to get API group resources: unable to retrieve the complete list of server APIs: image.openshift.io/v1: the server is currently unable to handle the request" result=ERROR | |
time="2024-04-22T13:07:37Z" level=debug msg="running check" check=ValidateOperatorBundle | |
time="2024-04-22T13:07:37Z" level=trace msg="reading annotations file from the bundle" | |
time="2024-04-22T13:07:37Z" level=debug msg="image extraction directory" directory=/tmp/preflight-1300942344/fs | |
time="2024-04-22T13:07:37Z" level=debug msg="running with additional checks enabled because of the OpenShift version detected" version=4.14 | |
time="2024-04-22T13:07:37Z" level=info msg="warning: Warning: Value cache.quay.io/v1alpha1, Kind=Memcached: provided API should have an example annotation" | |
time="2024-04-22T13:07:37Z" level=info msg="check completed" check=ValidateOperatorBundle result=PASSED | |
time="2024-04-22T13:07:37Z" level=debug msg="running check" check=BundleImageRefsAreCertified | |
time="2024-04-22T13:07:37Z" level=info msg="Check BundleImageRefsAreCertified is not currently being enforced." | |
2024/04/22 13:07:37 manifests true | |
2024/04/22 13:07:37 skipping non-yaml file without errors: manifests | |
2024/04/22 13:07:37 cache.quay.io_memcacheds.yaml false | |
2024/04/22 13:07:37 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/cache.quay.io_memcacheds.yaml" | |
2024/04/22 13:07:37 skipping file because it's not a ClusterServiceVersion: cache.quay.io_memcacheds.yaml | |
2024/04/22 13:07:37 memcached-operator-controller-manager-metrics-service_v1_service.yaml false | |
2024/04/22 13:07:37 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/memcached-operator-controller-manager-metrics-service_v1_service.yaml" | |
2024/04/22 13:07:37 skipping file because it's not a ClusterServiceVersion: memcached-operator-controller-manager-metrics-service_v1_service.yaml | |
2024/04/22 13:07:37 memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml false | |
2024/04/22 13:07:37 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml" | |
2024/04/22 13:07:37 skipping file because it's not a ClusterServiceVersion: memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml | |
2024/04/22 13:07:37 memcached-operator.clusterserviceversion.yaml false | |
2024/04/22 13:07:37 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/memcached-operator.clusterserviceversion.yaml" | |
2024/04/22 13:07:37 Found pullspec for relatedImage kube-rbac-proxy: gcr.io/kubebuilder/kube-rbac-proxy@sha256:d4883d7c622683b3319b5e6b3a7edfbf2594c18060131a8bf64504805f875522 | |
2024/04/22 13:07:37 Found pullspec for relatedImage memcached-operator: quay.io/rhn_apal/memcached-operator@sha256:ebbfedd514944e1a2a140f785f900d482eecbfff2e3d67bf76f6ee54569a49bc | |
2024/04/22 13:07:37 Found pullspec for container kube-rbac-proxy: gcr.io/kubebuilder/kube-rbac-proxy@sha256:d4883d7c622683b3319b5e6b3a7edfbf2594c18060131a8bf64504805f875522 | |
2024/04/22 13:07:37 Found pullspec for container manager: quay.io/rhn_apal/memcached-operator@sha256:ebbfedd514944e1a2a140f785f900d482eecbfff2e3d67bf76f6ee54569a49bc | |
time="2024-04-22T13:07:38Z" level=info msg="warning: image not found in Pyxis, therefore it is not certified" digest="sha256:d4883d7c622683b3319b5e6b3a7edfbf2594c18060131a8bf64504805f875522" | |
time="2024-04-22T13:07:38Z" level=info msg="warning: image not found in Pyxis, therefore it is not certified" digest="sha256:ebbfedd514944e1a2a140f785f900d482eecbfff2e3d67bf76f6ee54569a49bc" | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=BundleImageRefsAreCertified result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=SecurityContextConstraintsInCSV | |
time="2024-04-22T13:07:38Z" level=info msg="Check SecurityContextConstraintsInCSV is not currently being enforced." | |
time="2024-04-22T13:07:38Z" level=info msg="No custom security context constraint was detected in the CSV. The default restricted SCC will be used." | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=SecurityContextConstraintsInCSV result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=AllImageRefsInRelatedImages | |
time="2024-04-22T13:07:38Z" level=info msg="Check AllImageRefsInRelatedImages is not currently being enforced." | |
2024/04/22 13:07:38 manifests true | |
2024/04/22 13:07:38 skipping non-yaml file without errors: manifests | |
2024/04/22 13:07:38 cache.quay.io_memcacheds.yaml false | |
2024/04/22 13:07:38 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/cache.quay.io_memcacheds.yaml" | |
2024/04/22 13:07:38 skipping file because it's not a ClusterServiceVersion: cache.quay.io_memcacheds.yaml | |
2024/04/22 13:07:38 memcached-operator-controller-manager-metrics-service_v1_service.yaml false | |
2024/04/22 13:07:38 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/memcached-operator-controller-manager-metrics-service_v1_service.yaml" | |
2024/04/22 13:07:38 skipping file because it's not a ClusterServiceVersion: memcached-operator-controller-manager-metrics-service_v1_service.yaml | |
2024/04/22 13:07:38 memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml false | |
2024/04/22 13:07:38 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml" | |
2024/04/22 13:07:38 skipping file because it's not a ClusterServiceVersion: memcached-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml | |
2024/04/22 13:07:38 memcached-operator.clusterserviceversion.yaml false | |
2024/04/22 13:07:38 visited file or dir: "/tmp/preflight-1300942344/fs/manifests/memcached-operator.clusterserviceversion.yaml" | |
2024/04/22 13:07:38 Found pullspec for relatedImage kube-rbac-proxy: gcr.io/kubebuilder/kube-rbac-proxy@sha256:d4883d7c622683b3319b5e6b3a7edfbf2594c18060131a8bf64504805f875522 | |
2024/04/22 13:07:38 Found pullspec for relatedImage memcached-operator: quay.io/rhn_apal/memcached-operator@sha256:ebbfedd514944e1a2a140f785f900d482eecbfff2e3d67bf76f6ee54569a49bc | |
2024/04/22 13:07:38 Found pullspec for container kube-rbac-proxy: gcr.io/kubebuilder/kube-rbac-proxy@sha256:d4883d7c622683b3319b5e6b3a7edfbf2594c18060131a8bf64504805f875522 | |
2024/04/22 13:07:38 Found pullspec for container manager: quay.io/rhn_apal/memcached-operator@sha256:ebbfedd514944e1a2a140f785f900d482eecbfff2e3d67bf76f6ee54569a49bc | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=AllImageRefsInRelatedImages result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=FollowsRestrictedNetworkEnablementGuidelines | |
time="2024-04-22T13:07:38Z" level=info msg="Check FollowsRestrictedNetworkEnablementGuidelines is not currently being enforced." | |
time="2024-04-22T13:07:38Z" level=info msg="this operator does not indicate it supports installation into restricted networks. This is safe to ignore if you are not intending to deploy in these environments." | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=FollowsRestrictedNetworkEnablementGuidelines result=FAILED | |
time="2024-04-22T13:07:38Z" level=debug msg="running check" check=RequiredAnnotations | |
time="2024-04-22T13:07:38Z" level=info msg="check completed" check=RequiredAnnotations result=PASSED | |
time="2024-04-22T13:07:38Z" level=debug msg="md5 sum" md5sum=d41d8cd98f00b204e9800998ecf8427e | |
time="2024-04-22T13:07:38Z" level=info msg="Preflight result: FAILED" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"image": "quay.io/operator-pipeline-stage/new-test-operator:0.0.2", | |
"passed": false, | |
"certification_hash": "d41d8cd98f00b204e9800998ecf8427e", | |
"test_library": { | |
"name": "github.com/redhat-openshift-ecosystem/openshift-preflight", | |
"version": "1.9.1", | |
"commit": "f19c2a2f587f9890d45ef8b9c13503a4c03f3218" | |
}, | |
"results": { | |
"passed": [ | |
{ | |
"name": "ValidateOperatorBundle", | |
"elapsed_time": 11, | |
"description": "Validating Bundle image that checks if it can validate the content and format of the operator bundle" | |
}, | |
{ | |
"name": "RequiredAnnotations", | |
"elapsed_time": 10, | |
"description": "Checks that the CSV has all of the required feature annotations." | |
} | |
], | |
"failed": [], | |
"errors": [ | |
{ | |
"name": "ScorecardBasicSpecCheck", | |
"elapsed_time": 240213, | |
"description": "Check to make sure that all CRs have a spec block.", | |
"help": "There was a fatal error while running operator-sdk scorecard tests. Please see the preflight log for details. If necessary, set logging to be more verbose." | |
}, | |
{ | |
"name": "ScorecardOlmSuiteCheck", | |
"elapsed_time": 240209, | |
"description": "Operator-sdk scorecard OLM Test Suite Check", | |
"help": "There was a fatal error while running operator-sdk scorecard tests. Please see the preflight log for details. If necessary, set logging to be more verbose." | |
}, | |
{ | |
"name": "DeployableByOLM", | |
"elapsed_time": 734, | |
"description": "Checking if the operator could be deployed by OLM", | |
"help": "It is required that your operator could be deployed by OLM" | |
} | |
] | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment