-
Couldn't load subscription status.
- Fork 68
🌱 [Monorepo]: Move the hack demo scripts to the root #1739
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🌱 [Monorepo]: Move the hack demo scripts to the root #1739
Conversation
✅ Deploy Preview for olmv1 ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
06e8ccb to
1fbf046
Compare
1fbf046 to
495dda4
Compare
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #1739 +/- ##
=======================================
Coverage 68.24% 68.24%
=======================================
Files 58 58
Lines 4988 4988
=======================================
Hits 3404 3404
Misses 1342 1342
Partials 242 242
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
| kind-load: $(KIND) ## Load the built images onto the local cluster | ||
| $(CONTAINER_RUNTIME) save $(IMAGE) | $(KIND) load image-archive /dev/stdin --name $(KIND_CLUSTER_NAME) | ||
|
|
||
| ##@ Deploy |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's apparently no Deploy section in the op-con Makefile help. :(
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the demo should be under the doc section as it is right?
Should we create a Deploy section
Does it make sense we add it there?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can see the demo-update now
$ make
bash clean-venv fix-lint kind-cluster release test-ext-dev-e2e
bingo-upgrade crd-ref-docs fmt kind-deploy run test-unit
build debug-venv generate kind-load run-latest-release test-upgrade-e2e
build-deps demo-update go-build-linux lint serve-docs tidy
build-docs deploy-docs go-build-local manifests shell venv
build-linux docker-build help operator-controller show-venv verify
catalogd-e2e e2e help-extended post-upgrade-checks test verify-crd-compatibility
catalogd-image-registry e2e-coverage image-registry pre-upgrade-setup test-catalogd-e2e wait
catalogd-post-upgrade-checks envtest-k8s-bins ipython python test-catalogd-upgrade-e2e zsh
catalogd-pre-upgrade-setup extension-developer-e2e kind-clean
b110f2b to
7389dd4
Compare
|
@tmshort rebased :-) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/lgtm
Description
Closes: #1704
We are moving the demo scripts to the root
In the future, we might want to update the demo to be of the whole project instead only catalogd.
Local Test
$ make demo-update hack/demo/generate-asciidemo.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5481 100 5481 0 0 13378 0 --:--:-- --:--:-- --:--:-- 13368 asciinema: recording asciicast to /var/folders/n4/j272tr6d7hq63mf7_skv6zr80000gn/T/generate-asciidemo.XXXXX.3ps3gffYCb/catalogd-demo.cast asciinema: exit opened program when you're done 🎥 Begin recording - demo-script.sh 💭 Welcome to the catalogd demo ❯ trap "trap - SIGTERM && kill -- -$^Z$" SIGINT SIGTERM EXIT ❯ ^Z^Zkind delete cluster Deleting cluster "kind" ... Deleted nodes: ["kind-control-plane"] ❯ kind create cluster Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.31.2) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂 ❯ kubectl cluster-info --context kind-kind Kubernetes control plane is running at https://127.0.0.1:49803 CoreDNS is running at https://127.0.0.1:49803/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. 💭 use the install script from the latest github release ❯ curl -L -s https://github.com/operator-framework/operator-controller/releases/latest/download/install.sh | bash namespace/cert-manager created customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created serviceaccount/cert-manager-cainjector created serviceaccount/cert-manager created serviceaccount/cert-manager-webhook created clusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created clusterrole.rbac.authorization.k8s.io/cert-manager-cluster-view created clusterrole.rbac.authorization.k8s.io/cert-manager-view created clusterrole.rbac.authorization.k8s.io/cert-manager-edit created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created clusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificatesigningrequests created clusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificatesigningrequests created clusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created role.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created role.rbac.authorization.k8s.io/cert-manager:leaderelection created role.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created rolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created rolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created rolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created service/cert-manager created service/cert-manager-webhook created deployment.apps/cert-manager-cainjector created deployment.apps/cert-manager created deployment.apps/cert-manager-webhook created mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created deployment.apps/cert-manager-webhook condition met deployment.apps/cert-manager-cainjector condition met deployment.apps/cert-manager condition met mutatingwebhookconfigurations/cert-manager-webhook has {.webhooks[0].clientConfig.caBundle}. validatingwebhookconfigurations/cert-manager-webhook has {.webhooks[0].clientConfig.caBundle}. namespace/olmv1-system created customresourcedefinition.apiextensions.k8s.io/clusterextensions.olm.operatorframework.io created serviceaccount/operator-controller-controller-manager created role.rbac.authorization.k8s.io/operator-controller-leader-election-role created role.rbac.authorization.k8s.io/operator-controller-manager-role created clusterrole.rbac.authorization.k8s.io/operator-controller-clusterextension-editor-role created clusterrole.rbac.authorization.k8s.io/operator-controller-clusterextension-viewer-role created clusterrole.rbac.authorization.k8s.io/operator-controller-extension-editor-role created clusterrole.rbac.authorization.k8s.io/operator-controller-extension-viewer-role created clusterrole.rbac.authorization.k8s.io/operator-controller-manager-role created clusterrole.rbac.authorization.k8s.io/operator-controller-metrics-reader created clusterrole.rbac.authorization.k8s.io/operator-controller-proxy-role created rolebinding.rbac.authorization.k8s.io/operator-controller-leader-election-rolebinding created rolebinding.rbac.authorization.k8s.io/operator-controller-manager-rolebinding created clusterrolebinding.rbac.authorization.k8s.io/operator-controller-manager-rolebinding created clusterrolebinding.rbac.authorization.k8s.io/operator-controller-proxy-rolebinding created service/operator-controller-service created deployment.apps/operator-controller-controller-manager created certificate.cert-manager.io/olmv1-ca created certificate.cert-manager.io/olmv1-cert created clusterissuer.cert-manager.io/olmv1-ca created issuer.cert-manager.io/self-sign-issuer created namespace/olmv1-system configured customresourcedefinition.apiextensions.k8s.io/clustercatalogs.olm.operatorframework.io created serviceaccount/catalogd-controller-manager created role.rbac.authorization.k8s.io/catalogd-leader-election-role created clusterrole.rbac.authorization.k8s.io/catalogd-manager-role created clusterrole.rbac.authorization.k8s.io/catalogd-metrics-reader created clusterrole.rbac.authorization.k8s.io/catalogd-proxy-role created rolebinding.rbac.authorization.k8s.io/catalogd-leader-election-rolebinding created clusterrolebinding.rbac.authorization.k8s.io/catalogd-manager-rolebinding created clusterrolebinding.rbac.authorization.k8s.io/catalogd-proxy-rolebinding created service/catalogd-service created deployment.apps/catalogd-controller-manager created certificate.cert-manager.io/olmv1-ca configured certificate.cert-manager.io/catalogd-service-cert created clusterissuer.cert-manager.io/olmv1-ca unchanged issuer.cert-manager.io/self-sign-issuer unchanged mutatingwebhookconfiguration.admissionregistration.k8s.io/catalogd-mutating-webhook-configuration created Waiting for deployment "catalogd-controller-manager" rollout to finish: 0 of 1 updated replicas are available... Waiting for deployment "catalogd-controller-manager" rollout to finish: 0 of 1 updated replicas are available... deployment "catalogd-controller-manager" successfully rolled out deployment.apps/catalogd-controller-manager condition met deployment.apps/operator-controller-controller-manager condition met clustercatalog.olm.operatorframework.io/operatorhubio created clustercatalog.olm.operatorframework.io/operatorhubio condition met 💭 inspect crds (clustercatalog) ❯ kubectl get crds -A NAME CREATED AT certificaterequests.cert-manager.io 2025-02-10T16:47:43Z certificates.cert-manager.io 2025-02-10T16:47:43Z challenges.acme.cert-manager.io 2025-02-10T16:47:44Z clustercatalogs.olm.operatorframework.io 2025-02-10T16:48:01Z clusterextensions.olm.operatorframework.io 2025-02-10T16:48:01Z clusterissuers.cert-manager.io 2025-02-10T16:47:44Z issuers.cert-manager.io 2025-02-10T16:47:44Z orders.acme.cert-manager.io 2025-02-10T16:47:44Z ❯ kubectl get clustercatalog -A NAME LASTUNPACKED SERVING AGE operatorhubio 5s True 11s ❯ echo "... checking catalogd controller is available" ... checking catalogd controller is available ❯ kubectl wait --for=condition=Available -n olmv1-system deploy/catalogd-controller-manager --timeout=1m deployment.apps/catalogd-controller-manager condition met ❯ echo "... checking clustercatalog is serving" ... checking clustercatalog is serving ❯ kubectl wait --for=condition=Serving clustercatalog/operatorhubio --timeout=60s clustercatalog.olm.operatorframework.io/operatorhubio condition met ❯ echo "... checking clustercatalog is finished unpacking" ... checking clustercatalog is finished unpacking ❯ kubectl wait --for=condition=Progressing=False clustercatalog/operatorhubio --timeout=60s error: timed out waiting for the condition on clustercatalogs/operatorhubio 💭 port forward the catalogd-service service to interact with the HTTP server serving catalog contents ❯ (kubectl -n olmv1-system port-forward svc/catalogd-service 8081:443)& 0️⃣ 3️⃣ Forwarding from 127.0.0.1:8081 -> 8443 Forwarding from [::1]:8081 -> 8443 💭 check what 'packages' are available in this catalog ❯ curl -k https://localhost:8081/catalogs/operatorhubio/api/v1/all | jq -s '.[] | select(.schema == "olm.package") | .name' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Handling connection for 8081 100 20.8M 100 20.8M 0 0 94.5M 0 --:--:-- --:--:-- --:--:-- 94.3M "ack-acm-controller" "ack-documentdb-controller" "ack-athena-controller" "ack-apigatewayv2-controller" "ack-cloudtrail-controller" "ack-acmpca-controller" "ack-applicationautoscaling-controller" "ack-cloudwatchlogs-controller" "ack-apigateway-controller" "ack-cloudwatch-controller" "ack-dynamodb-controller" "ack-cloudfront-controller" "ack-ec2-controller" "ack-ecr-controller" "ack-ecs-controller" "ack-efs-controller" "ack-eks-controller" "ack-elasticache-controller" "ack-elbv2-controller" "ack-iam-controller" "ack-eventbridge-controller" "ack-emrcontainers-controller" "ack-kafka-controller" "ack-keyspaces-controller" "ack-kinesis-controller" "ack-kms-controller" "ack-lambda-controller" "ack-memorydb-controller" "ack-mq-controller" "ack-networkfirewall-controller" "ack-opensearchservice-controller" "ack-organizations-controller" "ack-pipes-controller" "ack-prometheusservice-controller" "ack-rds-controller" "ack-recyclebin-controller" "ack-route53-controller" "ack-route53resolver-controller" "ack-s3-controller" "ack-sagemaker-controller" "ack-secretsmanager-controller" "ack-ses-controller" "ack-sfn-controller" "ack-sns-controller" "ack-sqs-controller" "ack-ssm-controller" "aerospike-kubernetes-operator" "ack-wafv2-controller" "airflow-helm-operator" "akka-cluster-operator" "aiven-operator" "anchore-engine" "apch-operator" "alvearie-imaging-ingestion" "api-operator" "alloydb-omni-operator" "apicast-community-operator" "api-testing-operator" "apicurio-api-controller" "apicurio-registry" "application-services-metering-operator" "apimatic-kubernetes-operator" "aqua" "app-director-operator" "appranix" "argocd-operator-helm" "atlasmap-operator" "authorino-operator" "argocd-operator" "azure-service-operator" "appdynamics-operator" "aws-auth-operator" "banzaicloud-kafka-operator" "beegfs-csi-driver-operator" "bookkeeper-operator" "camel-k" "camel-karavan-operator" "bpfman-operator" "cassandra-operator" "cc-operator" "cass-operator-community" "awss3-operator-registry" "ceph-s3-operator" "chaosblade-operator" "carbonetes-operator" "cert-manager" "clever-operator" "cluster-aas-operator" "cloudnative-pg" "cluster-impairment-operator" "cluster-manager" "cockroachdb" "community-trivy-operator" "composable-operator" "cos-bucket-operator" "couchbase-enterprise" "clickhouse" "community-kubevirt-hyperconverged" "cryostat-operator" "credstash-operator" "customized-user-remediation" "dapr-kubernetes-operator" "datadog-operator" "datasance-pot-operator" "datatrucker-operator" "debezium-operator" "dell-csm-operator" "deployment-validation-operator" "ditto-operator" "dns-operator" "dnext-operator" "druid-operator" "cte-k8s-operator" "ecr-secret-operator" "dynatrace-operator" "eginnovations-operator" "elastic-cloud-eck" "ember-csi-operator" "enc-key-sync" "enmasse" "edp-keycloak-operator" "elastic-phenix-operator" "esindex-operator" "etcd" "event-streams-topic" "ext-postgres-operator" "eventing-kogito" "falco" "external-secrets-operator" "federatorai" "fence-agents-remediation" "flagsmith" "fossul-operator" "function-mesh" "flux-operator" "flink-kubernetes-operator" "gingersnap" "galaxy-operator" "github-arc-operator" "gitlab-operator-kubernetes" "gitlab-runner-operator" "grafana-operator" "flux" "halkyon" "ham-deploy" "hawkbit-operator" "hawtio-operator" "hive-operator" "hazelcast-platform-operator" "horreum-operator" "hpa-operator" "hpe-csi-operator" "hyperfoil-bundle" "ibm-application-gateway-operator" "hpe-ezmeral-csi-operator" "hedvig-operator" "ibm-block-csi-operator-community" "ibm-quantum-operator" "ibm-security-verify-access-operator" "ibm-security-verify-directory-operator" "ibm-spectrum-scale-csi-operator" "ibmcloud-iam-operator" "infinispan" "ibmcloud-operator" "instana-agent-operator" "instaslice-operator" "integrity-shield-operator" "intel-device-plugins-operator" "intel-ethernet-operator" "integration-operator" "iot-simulator" "istio" "istio-workspace-operator" "ipfs-operator" "joget-tomcat-operator" "kaap" "jenkins-operator" "kaoto-operator" "keda" "jaeger" "k8gb" "kernel-module-management-hub" "keycloak-operator" "kernel-module-management" "keydb-operator" "kiali" "klusterlet" "knative-operator" "keycloak-permissions-operator" "kogito-operator" "kom-operator" "kong" "kong-gateway-operator" "konveyor-operator" "krateo-installer" "ks-releaser-operator" "kuadrant-operator" "kube-green" "kepler-operator" "kubefed-operator" "kube-arangodb" "kubemod" "kubeflow" "kubemq-operator" "kubensync" "kubernetes-nmstate-operator" "kubernetes-imagepuller-operator" "kubero-operator" "kubestone" "layer7-operator" "kyverno-operator" "leaksignal-operator" "kubeturbo" "lightbend-console-operator" "kube-loxilb-operator" "limitador-operator" "lbconfig-operator" "litmuschaos" "lms-moodle-operator" "lib-bucket-provisioner" "mariadb-operator" "logging-operator" "machine-deletion-operator" "mariadb-operator-app" "log2rbac" "mcad-operator" "marin3r" "mercury-operator" "metallb-operator" "metering-upstream" "microcks" "loki-operator" "minio-operator" "mongodb-atlas-kubernetes" "mondoo-operator" "meshery-operator" "mongodb-enterprise" "mongodb-operator" "moodle-operator" "monocle-operator" "multi-nic-cni-operator" "multicluster-operators-subscription" "mysql" "myvirtualdirectory" "nacos-operator" "ndb-operator" "move2kube-operator" "ndmspc-operator" "netobserv-operator" "nexus-operator" "neuvector-operator" "nfs-operator" "node-healthcheck-operator" "node-maintenance-operator" "nri-plugins-operator" "noobaa-operator" "nexus-operator-m88i" "nuxeo-operator" "oci-ccm-operator" "oneagent" "nfs-provisioner-operator" "openshift-qiskit-operator" "openshift-node-upgrade-mutex-operator" "opentelemetry-operator" "oracle-database-operator" "nfd-operator" "otc-rds-operator" "ovms-operator" "nsm-operator-registry" "parodos-operator" "patterns-operator" "pcc-operator" "parseable-operator" "percona-postgresql-operator" "percona-server-mongodb-operator" "percona-xtradb-cluster-operator" "pinot-operator" "pixie-operator" "pmem-csi-operator" "portworx" "portworx-essentials" "postgres-operator" "openebs" "postgres-operator-krestomatio" "postgresql-operator" "postgresql" "prometheus" "project-quay-container-security-operator" "project-quay" "postgresql-operator-dev4devs-com" "prometheus-exporter-operator" "prometurbo" "pulp-operator" "pubsubplus-eventbroker-operator" "planetscale" "pulsar-resources-operator" "pulsar-operator" "pystol" "quay-api-operator" "rabbitmq-cluster-operator" "qserv-operator" "rabbitmq-messaging-topology-operator" "rabbitmq-single-active-consumer-operator" "redis-enterprise" "radanalytics-spark" "redis-operator" "registry-operator" "ripsaw" "robin-operator" "rook-ceph" "rocketmq-operator" "rsct-operator" "rook-edgefs" "sailoperator" "sap-btp-operator" "security-profiles-operator" "seldon-operator" "service-binding-operator" "self-node-remediation" "sematext" "shipwright-operator" "sap-hana-express-operator" "siddhi-operator" "silicom-sts-operator" "skupper-operator" "sigstore-helm-operator" "sn-operator" "searchpe-operator" "sonataflow-operator" "sosivio" "sonar-operator" "spark-gcp" "skydive-operator" "spinnaker-operator" "snapscheduler" "splunk" "simple-authenticator" "stackgres" "starboard-operator" "steerd-presto-operator" "storageos" "strimzi-kafka-operator" "submariner" "susql-operator" "routernetes-operator" "synapse-operator" "t8c" "tagger" "telegraf-operator" "tektoncd-operator" "tempo-operator" "temporal-operator" "tf-controller" "tf-operator" "tidb-operator" "topolvm-operator" "trident-operator" "trustee-operator" "trustify-operator" "ublhub-operator" "traefikee-operator" "universal-crossplane" "vault" "trivy-operator" "vault-helm" "victoriametrics-operator" "verticadb-operator" "virt-gateway-operator" "varnish-operator" "wandb-operator" "wavefront" "windup-operator" "wso2am-operator" "xrootd-operator" "yaks" "zookeeper-operator" "yugabyte-operator" "zoperator" "wildfly" 💭 check what channels are included in the wavefront package ❯ curl -k https://localhost:8081/catalogs/operatorhubio/api/v1/all | jq -s '.[] | select(.schema == "olm.channel") | select(.package == "wavefront") | .name' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Handling connection for 8081 100 20.8M 100 20.8M 0 0 116M 0 --:--:-- --:--:-- --:--:-- 116M "alpha" 💭 check what bundles are included in the wavefront package ❯ curl -k https://localhost:8081/catalogs/operatorhubio/api/v1/all | jq -s '.[] | select(.schema == "olm.bundle") | select(.package == "wavefront") | .name' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Handling connection for 8081 100 20.8M 100 20.8M 0 0 119M 0 --:--:-- --:--:-- --:--:-- 119M "wavefront-operator.v0.1.0" 🎬 End recording - demo-script.sh (Powered by https://github.com/zechris/asciinema-rec_script v1.2.0-rc4-28-g1cf5261-dirty) asciinema: recording finished asciinema: asciicast saved to /var/folders/n4/j272tr6d7hq63mf7_skv6zr80000gn/T/generate-asciidemo.XXXXX.3ps3gffYCb/catalogd-demo.cast View the recording at: https://asciinema.org/a/0aKeOR0bWbgc0QWjkek1bzHsV This asciinema CLI hasn't been linked to any asciinema.org account. Recordings uploaded from unrecognized systems, such as this one, are automatically deleted 7 days after upload. If you want to preserve all recordings uploaded from this machine, authenticate this CLI with your asciinema.org account by opening the following link: https://asciinema.org/connect/054dd205-c559-4711-80ae-a01034074c79Reviewer Checklist