text:
Synthesis failed for java-iot

Hello! Autosynth couldn't regenerate java-iot. :broken_heart:
Here's the output from running synth.py:
Cloning into 'working_repo'...
Switched to branch 'autosynth'
Running synthtool
['/tmpfs/src/git/autosynth/env/bin/python3', '-m', 'synthtool', 'synth.py', '--']
synthtool > Executing /tmpfs/src/git/autosynth/working_repo/synth.py.
On branch autosynth
nothing to commit, working tree clean
HEAD detached at FETCH_HEAD
nothing to commit, working tree clean
synthtool > Ensuring dependencies.
synthtool > Pulling artman image.
latest: Pulling from googleapis/artman
Digest: sha256:6aec9c34db0e4be221cdaf6faba27bdc07cfea846808b3d3b964dfce3a9a0f9b
Status: Image is up to date for googleapis/artman:latest
synthtool > Cloning googleapis.
synthtool > Running generator for google/cloud/iot/artman_cloudiot.yaml.
synthtool > Generated code into /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceState.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/PublicKeyCertificate.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GetDeviceRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceRegistriesRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/Device.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceStatesResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UpdateDeviceRegistryRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UnbindDeviceFromGatewayResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UpdateDeviceRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceManagerProto.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceConfig.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ModifyCloudToDeviceConfigRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceStatesRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UnbindDeviceFromGatewayResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ModifyCloudToDeviceConfigRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/RegistryCredentialOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/RegistryCredential.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/SendCommandToDeviceRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/HttpConfigOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UnbindDeviceFromGatewayRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceConfigVersionsResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeleteDeviceRegistryRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UpdateDeviceRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GetDeviceRegistryRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/CreateDeviceRegistryRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/PublicKeyCertificateOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/X509CertificateDetailsOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/MqttConfigOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeleteDeviceRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/StateNotificationConfig.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/X509CertificateDetails.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/HttpState.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeleteDeviceRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GatewayAuthMethod.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/SendCommandToDeviceResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ResourcesProto.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceStatesResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceCredentialOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceRegistriesRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GatewayListOptions.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/BindDeviceToGatewayResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/PublicKeyFormat.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/SendCommandToDeviceRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDevicesResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDevicesResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceConfigVersionsRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/PublicKeyCertificateFormat.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeleteDeviceRegistryRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceRegistry.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GetDeviceRegistryRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/CreateDeviceRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/SendCommandToDeviceResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/PublicKeyCredential.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/EventNotificationConfig.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceRegistriesResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/EventNotificationConfigOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDevicesRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/BindDeviceToGatewayResponseOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/MqttState.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceConfigVersionsResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceStatesRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GatewayType.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceCredential.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/LogLevel.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/MqttConfig.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/HttpConfig.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceRegistryOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GatewayConfig.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UnbindDeviceFromGatewayRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/CreateDeviceRegistryRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GatewayListOptionsOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDevicesRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/CreateDeviceRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/PublicKeyCredentialOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/BindDeviceToGatewayRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GatewayConfigOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/StateNotificationConfigOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/BindDeviceToGatewayRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceStateOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/GetDeviceRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceConfigVersionsRequest.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/UpdateDeviceRegistryRequestOrBuilder.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/ListDeviceRegistriesResponse.java.
synthtool > Replaced '// Generated by the protocol buffer compiler.  DO NOT EDIT!' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceConfigOrBuilder.java.
synthtool > Replaced '/\\*\n \\* Copyright \\d{4} Google LLC\n \\*\n \\* Licensed under the Apache License, Version 2.0 \\(the "License"\\); you may not use this file except\n \\* in compliance with the License. You may obtain a copy of the License at\n \\*\n \\* http://www.apache.org/licenses/LICENSE-2.0\n \\*\n \\* Unless required by applicable law or agreed to in writing, software distributed under the License\n \\* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n \\* or implied. See the License for the specific language governing permissions and limitations under\n \\* the License.\n \\*/\n' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/LocationName.java.
synthtool > Replaced '/\\*\n \\* Copyright \\d{4} Google LLC\n \\*\n \\* Licensed under the Apache License, Version 2.0 \\(the "License"\\); you may not use this file except\n \\* in compliance with the License. You may obtain a copy of the License at\n \\*\n \\* http://www.apache.org/licenses/LICENSE-2.0\n \\*\n \\* Unless required by applicable law or agreed to in writing, software distributed under the License\n \\* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n \\* or implied. See the License for the specific language governing permissions and limitations under\n \\* the License.\n \\*/\n' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceName.java.
synthtool > Replaced '/\\*\n \\* Copyright \\d{4} Google LLC\n \\*\n \\* Licensed under the Apache License, Version 2.0 \\(the "License"\\); you may not use this file except\n \\* in compliance with the License. You may obtain a copy of the License at\n \\*\n \\* http://www.apache.org/licenses/LICENSE-2.0\n \\*\n \\* Unless required by applicable law or agreed to in writing, software distributed under the License\n \\* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n \\* or implied. See the License for the specific language governing permissions and limitations under\n \\* the License.\n \\*/\n' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/proto-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/RegistryName.java.
synthtool > Replaced 'package com.google.cloud.iot.v1;' in /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/grpc-google-cloud-iot-v1/src/main/java/com/google/cloud/iot/v1/DeviceManagerGrpc.java.
synthtool > No files in sources [PosixPath('/home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/gapic-google-cloud-iot-v1/samples/src')] were copied. Does the source contain files?
synthtool > No files in sources [PosixPath('/home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/gapic-google-cloud-iot-v1/samples/resources')] were copied. Does the source contain files?
synthtool > No files in sources [PosixPath('/home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java/gapic-google-cloud-iot-v1/samples/src/**/*.manifest.yaml')] were copied. Does the source contain files?
synthtool > Running java formatter on 12 files
synthtool > Running java formatter on 1 files
synthtool > Running java formatter on 88 files
synthtool > Running java formatter on 0 files
synthtool > Wrote metadata to synth.metadata.
Traceback (most recent call last):
  File "/home/kbuilder/.pyenv/versions/3.6.1/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/kbuilder/.pyenv/versions/3.6.1/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/__main__.py", line 102, in <module>
    main()
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/__main__.py", line 94, in main
    spec.loader.exec_module(synth_module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/tmpfs/src/git/autosynth/working_repo/synth.py", line 35, in <module>
    java.common_templates()
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/languages/java.py", line 349, in common_templates
    templates = gcp.CommonTemplates().java_library(**kwargs)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/gcp/common.py", line 75, in java_library
    return self._generic_library("java_library", **kwargs)
  File "/tmpfs/src/git/autosynth/env/lib/python3.6/site-packages/synthtool/gcp/common.py", line 43, in _generic_library
    if not kwargs["metadata"]["samples"]:
KeyError: 'samples'

Synthesis failed

Google internal developers can see the full log here.

Autosynth passed, closing! :green_heart:

source: gharchive/issue

repo: googleapis/java-iot

license_type: permissive

license_source: bigquery


text:
ci: full airlock settings [not for review]

b/384085175. I referenced https://github.com/GoogleCloudPlatform/artifact-registry-maven-tools/issues/83#issuecomment-1524022896.
Step 1:
mvn --settings .mvn/settings_airlock_bootstrap.xml dependency:get -Dartifact=com.google.cloud.artifactregistry:artifactregistry-maven-wagon:2.2.4
Step 2:
mvn --settings .mvn/settings_airlock.xml clean install -DskipTests

Closing this. Please use https://github.com/googleapis/java-storage/pull/2847, which is based on the release 1 monnh ago.

source: gharchive/pull-request

repo: googleapis/java-storage

license_source: github-api


text:
feat!: add v1 API surface

BREAKING CHANGE: the v1 API client is now the default export

@bcoe we ready to land?

authors: JustinBeckwith bcoe

repo: googleapis/nodejs-datacatalog


text:
fix(test): increase minLikelihood option threshold to VERY_LIKELY

This one is annoying. I've personally fixed at least 3 instances of samples test failure due to some model changes in the DLP backend. We need a better way to test this.

cc @googleapis/ml-apis

authors: JustinBeckwith jkwlui

repo: googleapis/nodejs-dlp


text:
fix: Force http in the GAX module when using the GAX fallback and connecting to the emulator

fix: Force http in the GAX module when using the GAX fallback and connecting to the emulator

Can you think about how you might write a unit or integration test for this? My first, probably dumb, idea is to spin up a local http server and try to connect to it and make sure the connection is done via http (and not https). Just something to think about, if you can find a practical way to test this. Maybe there is somewhere else you can "hook in" to make sure the correct protocol is used.

Can you think about how you might write a unit or integration test for this? My first, probably dumb, idea is to spin up a local http server and try to connect to it and make sure the connection is done via http (and not https). Just something to think about, if you can find a practical way to test this. Maybe there is somewhere else you can "hook in" to make sure the correct protocol is used.

@dconeybe I think the best solution will be to configure all integration tests to run against the emulator. I'll touch base with the team on this and align with strategy for running against emulator vs production database.

Can you think about how you might write a unit or integration test for this? My first, probably dumb, idea is to spin up a local http server and try to connect to it and make sure the connection is done via http (and not https). Just something to think about, if you can find a practical way to test this. Maybe there is somewhere else you can "hook in" to make sure the correct protocol is used.

@dconeybe I think the best solution will be to configure all integration tests to run against the emulator. I'll touch base with the team on this and align with strategy for running against emulator vs production database.

But then the scenario where the emulator is not used is left untested. I definitely wouldn't block merging this PR on switching the tests to run against the Firestore emulator. But is there some way that you can write unit tests for the settings that get passed into new module.exports.v1(settings, gax)? It looks like it may be somewhat challenging, but it would be good to add such tests to avoid backsliding. Maybe just try it out to see if it's easy and timebox the work. If it ends up being unwieldy, then don't worry about it.

authors: MarkDuckworth dconeybe

repo: googleapis/nodejs-firestore


text:
Why is the default FlowControlOptions.maxExtension = Infinity?

After taking a closer look at the source code, I found that the default value for FlowControlOptions.maxExtensionis Infinity: https://github.com/googleapis/nodejs-pubsub/blob/master/src/lease-manager.ts#L189
This looks very strange to me and we experienced that our javascript service consumed a lot of message without moving forward. And this default value looks very starnge to me. May be I'm missing the point here?

Hi @katmatt, that is an excellent question! When we originally implemented the lease feature in the PubSub client, we didn't offer a maxExtension option at all. When the feature was later added, we felt it made sense to set the default to Infinity so we didn't disrupt applications that were already expecting messages to be locked forever.

@callmehiphop Thanks a lot for your quick response. I almost expected this answer😄 We have similar "issues" with beta versions of our API/SDK and I can relate a lot to your reasoning😄 Never break a public beta😉

authors: callmehiphop katmatt

repo: googleapis/nodejs-pubsub


text:
fix: add CANCELLED back to the auto-retry codes for pull subscriptions, for now

Temporarily fixes: https://github.com/googleapis/nodejs-pubsub/issues/979
We're still not sure what's causing these call cancelled errors, but that is being worked on separately right now. This is to get everyone back up and running for now.

My stricter testing updates from an earlier PR are making the tests flaky. I'm just going to remove the per-test cleanup in that file for now.


text:
semver: do not support upload() from url

Remove the upload() from url functionality. Instead, use
File.createWriteStream.
For performance reasons, nodejs-storage should not require the request
module. As we are currently exposing request as part of the public
API for upload(), not using request is a breaking change. Instead of
using a different dependency for the http requests, we leave this decision
to the users.
If you were using upload() from a url, replace it with the following:
const request = require('request');
let readStream = request(url).createReadStream();
const file = bucket.file(name)
const writeStream = file.createWriteStream();
readStream.pipe(writeStream)

Use node-fetch instead of request in system tests.

Sorry, didn't include the reasoning, see updated commit message.

Heads up @Kiricon-- we're going to be removing the feature you added for us. Do you think it's a mistake? The dilemma is that it forces us to keep a dependency on request, which we are trying to avoid (it's big, and it has introduced some security concerns).
We have a couple of options:

Get rid of the feature. The user can handle fetching the data themselves, and pipe it into a file.createWriteStream(). This is definitely not as easy as "put this remote file in my bucket". The user will have to create a File object, and familiarize themselves with the streaming APIs that both our library and their possibly-new HTTP-fetching library.
Use a different request library, but somehow remain library-agnostic when accepting common HTTP options, like headers.

Thoughts and ideas welcome!

It's been a week with no objections, can we merge this?

I consider this as a mistake. There are no "perfomance reasons" to do this. It's now harder to upload files, without any benefits performance-wise. Welp.

authors: fhinkel nnmrts stephenplusplus

repo: googleapis/nodejs-storage


text:
[CHANGE ME] Re-generated  to pick up changes in the API or client library generator.

This PR was generated using Autosynth. :rainbow:
Log from Synthtool
2020-04-29 07:07:36,328 synthtool > Executing /tmpfs/src/git/autosynth/working_repo/synth.py.
On branch autosynth
nothing to commit, working tree clean
2020-04-29 07:07:36,391 synthtool > Ensuring dependencies.
2020-04-29 07:07:36,718 synthtool > Cloning googleapis.
2020-04-29 07:07:37,071 synthtool > Generating code for: //google/iam/credentials/v1:iam-credentials-v1-py.
2020-04-29 07:07:40,595 synthtool > Copy: google/iam/credentials/v1/common.proto to /tmpfs/tmp/tmp47jjru_4/google/cloud/iam_credentials_v1/proto/common.proto
2020-04-29 07:07:40,595 synthtool > Copy: google/iam/credentials/v1/iamcredentials.proto to /tmpfs/tmp/tmp47jjru_4/google/cloud/iam_credentials_v1/proto/iamcredentials.proto
2020-04-29 07:07:40,595 synthtool > Placed proto files into /tmpfs/tmp/tmp47jjru_4/google/cloud/iam_credentials_v1/proto.
2020-04-29 07:07:40,596 synthtool > Generated code into /tmpfs/tmp/tmp47jjru_4.
2020-04-29 07:07:40,614 synthtool > Replaced 'google-cloud-iam-credentials' in google/cloud/iam_credentials_v1/gapic/iam_credentials_client.py.
2020-04-29 07:07:40,615 synthtool > Replaced 'google-cloud-iam-credentials' in docs/conf.py.
2020-04-29 07:07:40,616 synthtool > Replaced 'from google\\.iam\\.credentials\\.v1 import common_pb2' in tests/unit/gapic/v1/test_iam_credentials_client_v1.py.
2020-04-29 07:07:40,617 synthtool > Replaced 'from google\\.iam\\.credentials\\.v1 import common_pb2' in google/cloud/iam_credentials_v1/types.py.
2020-04-29 07:07:40,619 synthtool > Replaced 'from google\\.iam\\.credentials\\.v1 import common_pb2' in google/cloud/iam_credentials_v1/gapic/iam_credentials_client.py.
2020-04-29 07:07:40,623 synthtool > Replaced 'from google\\.iam\\.credentials\\.v1 import iamcredentials_pb2_grpc' in google/cloud/iam_credentials_v1/gapic/iam_credentials_client.py.
2020-04-29 07:07:40,623 synthtool > Replaced 'from google\\.iam\\.credentials\\.v1 import iamcredentials_pb2_grpc' in google/cloud/iam_credentials_v1/gapic/transports/iam_credentials_grpc_transport.py.
2020-04-29 07:07:40,624 synthtool > Replaced '"""Attributes:\n' in google/cloud/iam_credentials_v1/proto/common_pb2.py.
.coveragerc
.flake8
.github/CONTRIBUTING.md
.github/ISSUE_TEMPLATE/bug_report.md
.github/ISSUE_TEMPLATE/feature_request.md
.github/ISSUE_TEMPLATE/support_request.md
.github/PULL_REQUEST_TEMPLATE.md
.github/release-please.yml
.gitignore
.kokoro/build.sh
.kokoro/continuous/common.cfg
.kokoro/continuous/continuous.cfg
.kokoro/docs/common.cfg
.kokoro/docs/docs.cfg
.kokoro/presubmit/common.cfg
.kokoro/presubmit/presubmit.cfg
.kokoro/publish-docs.sh
.kokoro/release.sh
.kokoro/release/common.cfg
.kokoro/release/release.cfg
.kokoro/trampoline.sh
CODE_OF_CONDUCT.md
CONTRIBUTING.rst
LICENSE
MANIFEST.in
docs/_static/custom.css
docs/_templates/layout.html
docs/conf.py.j2
noxfile.py.j2
renovate.json
setup.cfg
Running session blacken
Creating virtual environment (virtualenv) using python3.6 in .nox/blacken
pip install black==19.3b0
black docs google tests noxfile.py setup.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/__init__.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/__init__.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/__init__.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/gapic/iam_credentials_client_config.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/gapic/transports/iam_credentials_grpc_transport.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/proto/common_pb2_grpc.py
reformatted /tmpfs/src/git/autosynth/working_repo/docs/conf.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/proto/iamcredentials_pb2.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/proto/iamcredentials_pb2_grpc.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/types.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/gapic/iam_credentials_client.py
reformatted /tmpfs/src/git/autosynth/working_repo/noxfile.py
reformatted /tmpfs/src/git/autosynth/working_repo/tests/unit/gapic/v1/test_iam_credentials_client_v1.py
reformatted /tmpfs/src/git/autosynth/working_repo/google/cloud/iam_credentials_v1/proto/common_pb2.py
All done! ✨ 🍰 ✨
15 files reformatted, 4 files left unchanged.
Session blacken was successful.
2020-04-29 07:07:44,048 synthtool > Wrote metadata to synth.metadata.

Bad docstring inserts

repo: googleapis/python-iam


text:
Renames for terminology sanity

We have a terminology mess in toolkit, partly due to factors outside our control, but this PR is an attempt to straighten out some of it. Another goal in this PR is to start making some room for other types of clients besides Gapic.
Here are the terminology problems we have:

"service" is inherently ambiguous: In proto2/3, it is a group of API methods; however, in service config, a Service applies to a full API product, containing multiple instances of "service" definitions from proto.
"api" is inherently ambiguous: In service config, an Api applies to a "service" definition from proto, but in product names, it applies to the whole product.

The toolkit codebase has mirrored different instances of these usages in different places, resulting in a pretty confusing situation:

ApiConfig (Gapic generation) applies to full product; Api (used in Discovery) applies to a group of API methods (subset of a product)
Instances of the type Interface (a group of API methods) are called "service" all over the place in Gapic config; ServiceConfig applies to a product, and Service (used in Discovery) also applies to a product.

In this PR, I'm doing the following:

Renaming ApiConfig to GapicProductConfig, introducing an interface ProductConfig that is input-agnostic
Renaming MethodConfig to GapicMethodConfig
Renaming InterfaceConfig to GapicInterfaceConfig, introducing an interface InterfaceConfig that is input-agnostic
Renaming ServiceConfig to ProductServiceConfig
Renaming SurfaceTransformerContext to GapicInterfaceContext, introducing an interface InterfaceContext that is input-agnostic
Renaming MethodTransformerContext to GapicMethodContext
Renaming all variables holding Interface to "apiInterface" (former names: "service", "interfaze", "iface")

I am not going to take on extra renames in this PR; if there are additional suggestions, we can consider that for follow-up.

Codecov Report

Merging #1180 into master will increase coverage by <.01%.
The diff coverage is 89.71%.

@@             Coverage Diff             @@
##             master   #1180      +/-   ##
===========================================
+ Coverage     86.09%   86.1%   +<.01%
- Complexity     3682    3685       +3
===========================================
  Files           372     372
  Lines         14514   14548      +34
  Branches       1626    1627       +1
===========================================
+ Hits          12496   12526      +30
- Misses         1582    1586       +4
  Partials        436     436

Impacted Files
Coverage Δ
Complexity Δ

...google/api/codegen/php/PhpGapicCodePathMapper.java
86.66% <ø> (ø)
5 <0> (ø)
:arrow_down:

.../transformer/StandardImportSectionTransformer.java
100% <ø> (ø)
5 <0> (ø)
:arrow_down:

...oogle/api/codegen/nodejs/NodeJSCodePathMapper.java
62.5% <ø> (ø)
2 <0> (ø)
:arrow_down:

...n/java/com/google/api/codegen/ServiceMessages.java
41.17% <ø> (ø)
7 <0> (ø)
:arrow_down:

...n/transformer/php/PhpImportSectionTransformer.java
86.66% <ø> (ø)
4 <0> (ø)
:arrow_down:

...e/api/codegen/gapic/PackageNameCodePathMapper.java
100% <ø> (ø)
2 <0> (ø)
:arrow_down:

...ava/com/google/api/codegen/nodejs/NodeJSUtils.java
50% <ø> (ø)
1 <0> (ø)
:arrow_down:

...degen/transformer/RetryDefinitionsTransformer.java
100% <ø> (ø)
6 <0> (ø)
:arrow_down:

...gen/transformer/go/GoImportSectionTransformer.java
95.45% <ø> (ø)
8 <0> (ø)
:arrow_down:

...e/api/codegen/gapic/CommonGapicCodePathMapper.java
96.55% <ø> (ø)
10 <0> (ø)
:arrow_down:

... and 72 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a0980c6...3ffb7c6. Read the comment docs.

LGTM

repo: googleapis/toolkit


text:
Add value conversion tables

Adds value conversion tables to perform lazy computations of lookup tables for mapping from a uint16 value to a float in [lower_bound, upper_bound].
Owners of the value conversion tables are SubmapController, PoseGraph2D, ActiveSubmaps and ProbabilityGridPointsProcessor. For concurrency reasons, having only a single owner is not possible.
Follow up PR in cartographer_ros  is prepared.

@wally-the-cartographer merge

Merge requested by authorized user kdaun. Merge queue now has a length of 2.

authors: kdaun wally-the-cartographer

repo: googlecartographer/cartographer


text:
CMAP Drop specific tables

In the command:
fontbakery-fix-cmap.py
Currently only drops the tables the tables listed as PlatformID: 3
Are we able to add options to drop specific tables (e.g. PlatformID: 0)?
These are superfluous tables which in some instances (e.g. Android) that aren't needed.

(from phone) The pid=0 are for osx and for 3 are windows? What are the unicode ones?

pid=0 – Unicode; 2.0+semantics, BMP only
pid=1 – Macintosh; Roman
pid=3 – Microsoft; Unicode BMP only
Is what's stated in OTMaster

I can change the code to do these extra things. But I'd rather only do it if we get a clear rationale, otherwise I'd few a bit dumb implementing stuff blindly. I want to understand what's the real need for this. Are there user agents that fail to load a font with these tables? Or is it only meant for reducing file-size, or some other reason?
It would make me extremely happy to hear some of you explain in more details the PROs and CONs of it all.
Also, we should be collecting this kind of knowledge in general so we can better document the scripts on their respective docstrigs as well as an overview on FontBakery's README.md.

I also noticed that the -drop-mac-subtable long argument lacks an 's' (plural) and it has only a single dash. Long attributes should have two dashes while short ones (like -f4 and -dm) should have a single one. I'll change that soon to --drop-mac-subtables (just like --format-4-subtables)
And the --help output has poorly formatted info text. I'll clean that up as well.

The specific engineering request was,

If there are duplicate entries in the name with with different platform IDs, yes, please remove the Apple ones and only keep the Microsoft ones.

However, I would say we prefer Unicode ones over MS ones

We were targeting Android users specifically, and found that we only needed one set of CMAP tables (Unicode, pid=0). The rest could be removed in their entirety, as this would help save on the file size.

The original request in the initial description of this issue asks for a way to (A) "drop specific tables (e.g. PlatformID: 0)". And the latest message requests (B) a tool to drop all except pid=0.
Those sound like requests with completely opposite meanings. Can I move on and implement only (B) "drop all CMAP except pid=0" ? Or do you actually need both kinds of tool feature ?

From further discussion, it turns out that pid=0 needs to be retained, and everything else can be removed as far as I'm aware. Sorry for the confusion.

No problem. Thanks for the clarification. I'll be working on implementing this now.

I've implemented it in the above merged pull request.
Please test it and reopen the issue is any further tweaks are needed in the tool.
cheers!

Thanks Felipe!

This is great, thanks Felipe!

you're welcome! ;-)
Let me know if you need any further tweaks or fixes.

Thanks for this tool!
Just in case it might be helpful to somebody (as reading just the spec hasn’t helped me much): testing on Win10, Firefox 56, Chrome 64, Opera 50 and Edge 41 are all fine with either format-4-subtables or keep-only-pid-0 or both. But IE11 won’t render a font after keep-only-pid-0.
Admittedly, tested only on one font…
Personal takeout (original font contains just PID 0, 3): dropping v.12 to v.4 when there are no glyphs encoded outside BMP (format-4-subtables errors if true) saves quite a bit (>7% in my case) even in woff2, while keeping only PID 0 doesn’t save anything and is not safe. Will see how picky Safari is and report here if needed.

@paperboyo thanks for reporting this info, super helpful! :)

authors: Colophon-Foundry davelab6 felipesanches paperboyo

repo: googlefonts/fontbakery


text:
fix issue #820: deal with multiply encoded spacing glyphs

@khaledhosny Per https://github.com/googlefonts/fontbakery/issues/820#issue-164210005 I need to test this with https://github.com/khaledhosny/reem-kufi before merging into master.

Not sure if this code is trying to fix the same issue. We don’t have multiple space glyphs, what we have is a single glyph that is used for both space and nbsp i.e. the cmap entries for both characters map to the same glyph.

authors: felipesanches khaledhosny


text:
gftools packager possible bug preventing update a project

When trying to create a new PR for a project that was recently pushed using Packager, different Key-Errors were reported.
Command used:
gftools packager "Big Shoulders Display" ../fonts -p --no-source
First attempt: KeyError: 'rokkit'
From https://github.com/google/fonts
 * branch              master     -> FETCH_HEAD
DONE fetch
Traceback (most recent call last):
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/bin/gftools-packager.py", line 144, in <module>
    packager.make_package(**args.__dict__)
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/lib/python3.8/site-packages/gftools/packager.py", line 1718, in make_package
    _packages_to_target(tmp_package_dir, family_dirs, target, is_gf_git,
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/lib/python3.8/site-packages/gftools/packager.py", line 1543, in _packages_to_target
    _packagage_to_git(tmp_package_family_dir, target, family_dir,
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/lib/python3.8/site-packages/gftools/packager.py", line 1443, in _packagage_to_git
    _git_make_commit(repo, add_commit, force, yes, quiet, branch,
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/lib/python3.8/site-packages/gftools/packager.py", line 1354, in _git_make_commit
    title, body = _title_message_from_diff(repo, base_commit.tree, new_tree)
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/lib/python3.8/site-packages/gftools/packager.py", line 1306, in _title_message_from_diff
    family_changes_dict = _get_change_info_from_diff(repo, root_tree, tip_tree)
  File "/Users/vv_monsalve/Documents/03_GOOGLE/fonts/venv/lib/python3.8/site-packages/gftools/packager.py", line 1261, in _get_change_info_from_diff
    family_tree = family_tree / pathpart
KeyError: 'rokkitt'

Second attempt: KeyError: 'capriola'
Third attempt: KeyError: 'bahiana'

Ok, thanks, looks like its traversing a path that does not exist.

This was interesting, I started to look into the issue and noticed that the tool wrongly merges "None" values from the stripped/normalized upstream.yaml values in google/fonts into the internal upstream configuration data. So, I fixed that, then continued to look into this issue. It turns out that was the root cause of this issue. :tada:

authors: graphicore vv-monsalve

repo: googlefonts/gftools


text:
Release 0.3.0

Release 0.3.0
Prerequisites

[ ] Have at least Editor level access to quilkin Google Cloud project.
[ ] Local gcloud configuration is pointing at the quilkin Google Cloud project.
[ ] Local git remote upstream points at git@github.com:googleforgames/quilkin.git.

Steps

[ ] Review that closed issues have appropriate tags for the changelog.
[ ] Review that merged PRs have appropriate tags for the changelog.
[ ] Run git remote update && git checkout main && git reset --hard upstream/main to ensure your code is in line
with upstream.
[ ] Update Cargo version for release

[ ] Edit the version field in ./Cargo.toml and remove the -dev suffix.
[ ] Edit the quilkin-macros dependency in ./Cargo.toml and remove the -dev suffix.
[ ] Edit the version field in ./macros/Cargo.toml and remove the -dev suffix.

[ ] cd to ./build/release and run make to submit the cloud build
[ ] Download all the artifacts from the cloud build.
[ ] Move the CHANGELOG.md to the root of this repository, replacing any previous versions.
[ ] Review license.html to ensure that there aren't any new MPL, or CDDL dependencies from the last
release. If there are:

[ ] Add the dependencies to archive_dependencies.sh
so that the source is archived in the container image.
[ ] Reset checklist back to "run make to submit the cloud build", and start from there again.

[ ] Run cd macros && cargo publish --dry-run --allow-dirty and ensure there are no issues.
[ ] Run cargo publish --dry-run --allow-dirty and ensure there are no issues.
[ ] Add a release item to README.md "Documentation" > "Releases" list with related links in reverse chronological
order.
[ ] Submit these changes as a PR, and merge with approval.
[ ] Create a Github release using the
Github release template.

[ ] Populate the tag with v0.3.0, description, and relevant changelog sections.
[ ] Attach all the remaining cloud build artifacts to the release.

[ ] Run git remote update && git checkout main && git reset --hard upstream/main to ensure your code is in line
with upstream.
[ ] Run git checkout -b release-0.3.0 && git push upstream release-0.3.0 to create a release branch.
[ ] Publish to crates.io/crates/quilkin-macros: run cd macros && cargo publish
[ ] Publish to crates.io/crates/quilkin: run cargo publish
[ ] Submit the release.
[ ] Post an announcement to the mailing list.
[ ] Post to the Twitter account.
[ ] Update Cargo version for development

[ ] Edit Cargo.toml and increment the minor version and apply the -dev suffix to the
version.
[ ] Edit the quilkin-macros dependency in ./Cargo.toml and increment the minor version
and apply the -dev suffix to the version.
[ ] Edit the version field in ./macros/Cargo.tomland increment the minor version
and apply the -dev suffix to the version.

[ ] Submit this change as a PR, and merge with approval.

Congratulation! 🎉 You have successfully released Quilkin!

Getting this setup. Will merge:

#496
#497

Before continuing.

Side-note: I think we could automate some of these steps to reduce the friction of making Quilkin releases. They'd also be good first issues, @markmandel would you be interested in making a couple of issues for some of the things in the list you think could be automated?

@XAMPPRocky anything in particular that jumps out at you? 🤔 I think you had some tools for incrementing crate versions I think?

Twitter account post is scheduled for tomorrow PST morning (9:07am) - I find I get best engagement around that time.

Closing as complete.

anything in particular that jumps out at you?

I think all of the steps could be automated to be honest. In particular all of the commands about ensuring that the state of the repository is both the state it should be in, and working as expected could definitely be reduced to a single command.
In my mind I think as a goal, we should have a nearly entirely automated release pipeline so that we can release a new version of Quilkin with one push of a button (within reason of course). Like it would be great if we just had a manual GitHub Action so that you could just input the next dev version, and have CI take care of the rest.
https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/

authors: XAMPPRocky markmandel

repo: googleforgames/quilkin


text:
Validation issue with +380713362477

Validation Results:
Result from isPossibleNumber(): true
Result from isValidNumber(): false
Phone Number region: UA
Result from getNumberType(): UNKNOWN
Formatting Results:
E164 format: invalid
Original format: +380713362477
National format: 713362477
International format: invalid
Out-of-country format from US: invalid
Out-of-country format from Switzerland: invalid
It is valid UA number

@z0mb1ek ,
Thank you for taking the time to improve libphonenumber!
We were able to conclude that 71 range phone numbers are valid in Ukraine. We are not able to find what type of numbers are these. Ex: fixed-line, mobile.. Please let us know the same and also share any official evidence you may have. See our guidelines.

https://en.m.wikipedia.org/wiki/Donetsk_People's_Republic this number is from

@z0mb1ek,
I am not able to find any reference of 71 range phone numbers in above page.

@z0mb1ek,
Can you please let us know what is the type of numbers are these. Ex: fixed-line, mobile..etc. Please share any official evidence you may have. See our guidelines.

@z0mb1ek,
We already support 73 range phone numbers under mobile. So we guess this one also is a mobile range. We will go ahead and support 71 range numbers under mobile category.
If you think otherwise, please let us know so that we can update the library accordingly. If it is mobile range, please provide any supporting evidence (for example, a national numbering plan,
announcements from mobile carriers, news articles) so that we can update the
carrier details as well.
Please note that you have submitted this information with the knowledge that we
may use, modify, reproduce, publicly display, and distribute the information in
accordance with our open source policies. Please let us know if you did not
intend to submit the information for such use.

there is no official information, but there are many references at google, forums, etc.

71 range have http://phoenix-dnr.ru/

Fixed in release 8.0.1.

great work!

authors: kkeshava penmetsaa z0mb1ek


text:
Add new web project (spring-boot) to host the rest api and the web UI

add new project for hosting a rest api and the UI using spring-boot and tomcat

LGTM! We discussed it over a pair programming session.

repo: googleinterns/spec-math


text:
Have small mockups for design

Have drawings completed

Erica drew images and a small mock up of the design we want to take. This will not get implemented right away, but will be put into the website once core functionality is working.


text:
Add in-app help/explanatory text

Initially maybe just tooltips on the toggle buttons explaining what they do.   Hmm.  Or maybe better '?' icons that link to github markdown pages?

Fixed here: https://github.com/googlemaps/fleet-debugger/commit/e46ab1e7a7c6fb7049b077499e2aa65e1d506683

repo: googlemaps/fleet-debugger


text:
custom color for one street

I want to set a custom color for some street(Not for all street). I will pass the street name and color then that color will set for that street. Is this possible?

You should be able to do that using polylines assuming you have the lat/lng points along that street.

@arriolac  No, I don't have coordinates. I just have a street name. So need to show that street in different color.

Unfortunately that's possible right now with our available APIs 😕 The closest would be to use the Geocoding API which can give you the geometric center of the street address and its bounds.

Ohh 😔. Thanks for the quick reply. The information you provided is also helpful.

repo: googlemaps/maps-sdk-for-ios-samples


text:
Ears are never getting detected.

LEFT_EAR_TIP, LEFT_EAR, RIGHT_EAR_TIP, RIGHT_EAR are never getting detected.

Are other landmarks being detected?
What is the image resolution and face size within the image?

The resolution is same as the one in "FaceTracker" example.

Yes, Ear landmark is never getting detected.

Other 8 landmarks are coming but not able to detect ear landmarks from getlandmark() method.

For IOS ,they are able to detect the ear position properly but for android it is not .
Please answer for this, i have spend around 2 months for this issue.

Can you provide the sample image you're trying to detect the face with ?

These are all the images am trying to detect the ear position , for ios the ear position coming properly but for android it is not coming .Please answer for this orelse we can't complete this project.
and one more thing is Other 8 landmarks are coming but not able to detect ear landmarks from getlandmark() method in android.

Can you also provide your FaceDetector configuration?
Can you also try the following configuration?
FaceDetector detector = new FaceDetector.Builder(context)
.setTrackingEnabled(true)
.setMode(FaceDetector.ACCURATE_MODE)
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.build();

duplicate: https://github.com/googlesamples/android-vision/issues/174
Really sorry for the inconvenience, Android Face API doesn't support ear detection for now.

I have tried your above code for my image
plz look at the green circle .only these things are coming . but i want that for ear.
here i have attached the sample image and code too.
plz take a look.
FaceDetector detector = new FaceDetector.Builder(getApplicationContext())
.setTrackingEnabled(true)
.setMode(FaceDetector.ACCURATE_MODE)
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.build();

That image works fine in my test App.
Can you output all landmark types, and check if LEFT_EAR is detected?
The top right landmark looks like a wrongly positioned LEFT_EAR to me.

Could you plz send the exact code that you have used to detect the ear position?
Thanks..

@PremMayilai Did you ever figure out how to get the scale to properly place the landmarks in real time video? I have tried multiple things but no luck.

@PremMayilai Did you ever figure out how to get the scale to properly place the landmarks in real time video? I have tried multiple things but no luck.

Ears are not detected till now. Using play-services-vision: 11.8.0

Is there any way to detect the ears. Same as above images.

I am also facing the same issue, is there any solution yet?

authors: Perceptee PremMayilai TomSteward androidlab hardikwingify liuyl mehulnahar pm0733464 rarahat02 shivangbtech

repo: googlesamples/android-vision


text:
Implemented default auth in all quickstarts.

Description
Implemented Google default auth in all quickstarts.
Fixes # (223108658)
Is it been tested?

[X] Development testing done

Checklist

[X] My code follows the style guidelines of this project
[X] I have performed a self-review of my own code
[X] I have performed a peer-reviewed with team member(s)
[X] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[X] My changes generate no new warnings
[X] Any dependent changes have been merged and published in downstream modules

Same as python PR, this requires a little more thought and coordination on the docs side of things to make sure the quickstart instructions are accurate. Let's chat at next meeting.

authors: RajeshGogo sqrrrl

repo: googleworkspace/java-samples


text:
🛑 goormEDU is down

In 89da267, goormEDU (https://edu.goorm.io) was down:

HTTP code: 403
Response time: 594 ms

Resolved: goormEDU is back up in 1ca695e after 5 minutes.

repo: goorm-dev/goorm-status

license: MIT


text:
🛑 goormEDU is down

In 93b8991, goormEDU (https://edu.goorm.io) was down:

HTTP code: 403
Response time: 603 ms

Resolved: goormEDU is back up in 7260756 after 19 minutes.


text:
🛑 goormIDE is down

In c76a6f7, goormIDE (https://ide.goorm.io) was down:

HTTP code: 403
Response time: 714 ms

Resolved: goormIDE is back up in 78f2cd5 after 1 hour, 4 minutes.


text:
🛑 goormEDU is down

In de1fcc8, goormEDU (https://edu.goorm.io) was down:

HTTP code: 403
Response time: 1394 ms

Resolved: goormEDU is back up in d3946fb after 5 minutes.


text:
Feature/pubsub options

This is a 🐛 bug fix.
This is a 🙋 feature or enhancement.

Summary

No Breaking Changes.
PubSub Handler Decorator:

Add options as last argument

autoAck (default true for backward compatability) defines if the message should be acknowledged automatically when successfully processed

PubSub Module Options:

config.consumer.prefetchPerConsumer defines the limit of unacknowledged messages (processed in parallel) for one consumer (handler)
config.consumer.prefetchPerChannel defines the limit of unacknowledged messages (processed in parallel) for all consumers in total (all handlers; you can understand this as instance-level limit)

PubSub Event:

Add ack and nack methods

Internal:

Remove automatic message acknowledge immediately after consumption
Use single channel for all consumers

Context

Pull Request Test Coverage Report for Build 748442537

2 of 2 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 88.889%

Totals

Change from base Build 460742717:
0.0%

Covered Lines:
13

Relevant Lines:
14

💛  - Coveralls

authors: Leichtwind coveralls

repo: goparrot/nestjs-pubsub-event-bus


text:
External service calls

For advanced users there might be a good idea to use external service calls that would complete variables in their templates.
Example:
GET https://api.service.com/?to.email[]=[email_address]&first_name=[first_name]...

Which could respond with a JSON:
{
  'customer': {
     'name': 'John Smith',
     ....
     'last_order': {
         'order_date': '2014-01-01 .. '
         'item_name': 'CHeese',
         'item_quantity': 22,
     }
  },
}

This could in term be used in quicktext like so:
Your last order from {{service_api.customer.last_order.order_date}} containing {{service_api.customer.last_order.item_name}} x {{service_api.customer.last_order.item_quantity}}

In term this would become (after completion):
Your last order from2014-01-01 containing Cheese x 22

The way the extension works now needs to be changed in order to do this. Some sort of spinner needs to be shown when these kinds of quicktexts are used since this is a remote server somewhere and might have downtime, in which case timeouts need to be set in place.
Not a trivial thing to implement, but might be very useful potentially.
Another way to do this is to support major CRMs and ERPs. A few come to mind:

Salesforce
SugarCRM
CapsuleCRM
OpenERP

The biggest problem with this imho is that its not exactly user friendly. Needs some understanding from the end user of how this thing works and setup of custom extensions.

Closing this because nobody asked for it + we have this feature in the helpdesk now.

repo: gorgias/gorgias-chrome

license: mit


text:
Update to use Hugo and GitHub Pages

Fixes #
Summary of Changes

PS: Make sure your PR includes/updates tests! If you need help with this part, just ask!

@AlexVulaj ptal

Updated CodeQL configuration to not scan for Go or Ruby, not sure why it was doing that anyways, maybe from the old website version and build scripts.


text:
error code 401: AUTH_KEY_UNREGISTERED when running updates example

What version of gotd are you using?
github.com/gotd/td v0.80.0
Can this issue be reproduced with the latest version?
Yes
What did you do?
Ran the updates sample
copy contents to updatetest.go
package main

import (
	"context"
	"os"
	"os/signal"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"

	"github.com/gotd/td/telegram"
	"github.com/gotd/td/telegram/updates"
	updhook "github.com/gotd/td/telegram/updates/hook"
	"github.com/gotd/td/tg"
)

func main() {
	ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
	defer cancel()
	if err := run(ctx); err != nil {
		panic(err)
	}
}

func run(ctx context.Context) error {
	log, _ := zap.NewDevelopment(zap.IncreaseLevel(zapcore.InfoLevel), zap.AddStacktrace(zapcore.FatalLevel))
	defer func() { _ = log.Sync() }()

	d := tg.NewUpdateDispatcher()
	gaps := updates.New(updates.Config{
		Handler: d,
		Logger:  log.Named("gaps"),
	})

	os.Setenv("APP_ID", "XXXXX")
	os.Setenv("APP_HASH", "XXXXX")
	os.Setenv("SESSION_FILE", "/path/to/session.json")
	// Initializing client from environment.
	// Available environment variables:
	// 	APP_ID:         app_id of Telegram app.
	// 	APP_HASH:       app_hash of Telegram app.
	// 	SESSION_FILE:   path to session file
	// 	SESSION_DIR:    path to session directory, if SESSION_FILE is not set
	client, err := telegram.ClientFromEnvironment(telegram.Options{
		Logger:        log,
		UpdateHandler: gaps,
		Middlewares: []telegram.Middleware{
			updhook.UpdateHook(gaps.Handle),
		},
	})
	if err != nil {
		return err
	}

	// Setup message update handlers.
	d.OnNewChannelMessage(func(ctx context.Context, e tg.Entities, update *tg.UpdateNewChannelMessage) error {
		log.Info("Channel message", zap.Any("message", update.Message))
		return nil
	})
	d.OnNewMessage(func(ctx context.Context, e tg.Entities, update *tg.UpdateNewMessage) error {
		log.Info("Message", zap.Any("message", update.Message))
		return nil
	})

	return client.Run(ctx, func(ctx context.Context) error {
		// Note: you need to be authenticated here.

		// Fetch user info.
		user, err := client.Self(ctx)
		if err != nil {
			return err
		}
		return gaps.Run(ctx, client.API(), user.ID, updates.AuthOptions{
			OnStart: func(ctx context.Context) {
				log.Info("Gaps started")
			},
		})
	})
}

run go file:
go run updatetest.go

Check error:
2023-04-21T17:19:35.672-0500	INFO	conn.mtproto.rpc	rpc/engine.go:42	Initialized	{"v": "v0.80.0", "conn_id": 0, "dc_id": 2, "retry_interval": "5s", "max_retries": 5}
2023-04-21T17:19:35.672-0500	INFO	telegram/connect.go:114	Starting	{"v": "v0.80.0"}
2023-04-21T17:19:35.673-0500	INFO	telegram/session.go:46	Connection restored from state	{"v": "v0.80.0", "addr": "", "key_id": "XXXXXXX"}
2023-04-21T17:19:35.673-0500	INFO	conn.mtproto.rpc	rpc/engine.go:42	Initialized	{"v": "v0.80.0", "conn_id": 0, "dc_id": 2, "retry_interval": "5s", "max_retries": 5}
2023-04-21T17:19:35.858-0500	INFO	conn.mtproto	mtproto/connect.go:44	Key already exists	{"v": "v0.80.0", "conn_id": 0, "dc_id": 2}
2023-04-21T17:19:36.032-0500	INFO	conn	manager/conn.go:79	SessionInit	{"v": "v0.80.0", "conn_id": 0, "dc_id": 2}
2023-04-21T17:19:36.233-0500	INFO	conn.mtproto.rpc	rpc/engine.go:271	Close called	{"v": "v0.80.0", "conn_id": 0, "dc_id": 2}
2023-04-21T17:19:36.235-0500	INFO	telegram/connect.go:161	Closed	{"v": "v0.80.0"}
panic: callback: rpcDoRequest: rpc error code 401: AUTH_KEY_UNREGISTERED

What did you expect to see?
For the app to print messages
What did you see instead?
An error
What Go version and environment are you using?
version go1.20.2 darwin/amd64

Please see updated example.
I've added explicit authentication flow instead of comment.

authors: ernado sebastianmacias

repo: gotd/td


text:
Update (English) start page copy for user research round 4

Updating English to match Figma phase 1 page as of 8 March.

@cevangelougovcy Let's see if this works!

repo: gov-cy/dsf-prototype


text:
🛑 Crawler APIs is down

In c2c8530, Crawler APIs (https://crawler.ritamdigital.org/services/ritam/api/posts/top-headlines/tag/top-stories/editor) was down:

HTTP code: 502
Response time: 989 ms

Resolved: Crawler APIs is back up in dc16a7d after 6 minutes.

repo: govindbhardwaj/monitor-ritam


text:
Update rtmp_h264.c

Need to check return value( -1 ), else when void data is passed in, it will trigger segement fault in function rtmp_stream_start().

merge

repo: gozfree/libraries


text:
Load More Photos

If we wanted to add a button at the bottom of the page called "Load More" and when the user clicks on it,  the page loads more photos beneath the actual ones.  I am new to React and Fluxible.
Anybody has any idea on how to implement this new feature?

I tried using the module "react-infinite-scroll" but with no success. I am not even sure it's possible with an isomorphic app actually.

Hi @herve1976 thanks for the succestion - indeed this is a nice use case I'd like to explore in the future.

It is possible to do this. You can create a wrapper component that takes in a list (preferably supplied by stores)

authors: geekyme gpbl herve1976


text:
profiling mpi programs is not supported (was: How do use gperftools to profile mpi program?)

Originally reported on Google Code with ID 422
What steps will reproduce the problem?
1. mpicc -o t.x t.c -g
2. mpirun_rsh --hostfile=hfile -n 2 LD_PRELOAD=/home/niuq/tools/gperftools-2.0/gcc-build/lib/libtcmalloc.so
HEAPPROFILE=./tprofile ./t.x
3. I can get tprofile.0004.heap  tprofile.0017.heap  tprofile.0030.heap but the thing
is there not each processor seperate heap file. We can not distinguish which processor
heap file comes from?
What is the expected output? What do you see instead?
Expected heap file seperately for each mpi processor.

What version of the product are you using? On what operating system?
niuq@node020:~/code$ uname -a
Linux node020.cluster 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011
x86_64 x86_64 x86_64 GNU/Linux
gperftools-2.0

Please provide any additional information below.

niuq@node020:~/code$ cat t.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <string.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
    MPI_Init(&argc,&argv);
    int myrank;
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
    if(myrank==1)
    {
        size_t x=sizeof(int);
        printf( "size = %lu\n", x );
        int i;
        for(i=0;i<10000000;i++)
        {
            unsigned long s=100;
            int* sum=(int*)malloc(s*sizeof(int));
            int k;
            for(k=1;k<s;k++) sum[k]=sum[k-1]+5;
        }
    }
    MPI_Finalize();
    return 0;
}

mpicc -o t.x t.c -g

Reported by niuqingpeng on 2012-04-02 18:35:48

This seems to be same problem as issue #601. I.e. if program forks but doesn't exec (as mpi implementations might do) all instances will use same file.

@alk I cannot access this patch or is it already a part of gperftools. Also does this work for CPUPROFILE?

https://github.com/gperftools/gperftools/pull/1263 is in flight right now

authors: alk satishskamath

repo: gperftools/gperftools


text:
Incorrect name when searching with Chinese input method

Steps to reproduce

Result

Environment

GPUStack version: v0.4.0

Additional context
Add any other context about the problem here.

Verified in UI version cb5d9f6

repo: gpustack/gpustack


text:
ClassPageRenderer takes AGES because it double-calls an expensive method

We have a parameterized test with >50,000 cases.
The test has a Parameterized.Parameters(name= annotation) which I think causes TestResult.name == TestResult.displayName
Generating the HTML report for a test result takes AGES.
The time is spent in ClassPageRenderer.methodNameColumnExists
This is because the method is called TWICE:
** Once in methodNameColumnExists -> determineTableHeaders()
** Once in methodNameColumnExists() directly.

Expected Behavior
Call the method only once and pass the boolean to determineTableHeaders, that would at least double the performance.
Current Behavior
Our test engineers get bored waiting for the pages to render, and go to the pub.
Context
All our test engineers are in the pub because generating HTML reports takes so damn long.
Steps to Reproduce
A junit test with 50,000 cases, for each of which TestResult.getName() equals TestResult.getDisplayName() -
Your Environment
Nearest pub: 2 minutes away.
Time taken to run 50,000 test: 3 minutes.
Time taken to render page results: 4 minutes.
Time spent drinking = (3+4 [test+result]) - (2+2 [walk there and back]) = 3 minutes.
If we can get the drinking time down to 1 minute per test run, we can probably make it to 5pm without actually getting blind drunk.
I mean, it really ought to be faster to render a table result row faster than it's possible to run an entire unit test which, in many cases, invokes a compiler!

Similar to Shevek, I also experience this issue myself, in a situation very much like the one he himself describes. Gradle is quite a wonderful build system overall, but after all the trips to the pub I have experienced while waiting for my HTML test report to generate, I am becoming an alcoholic.

@shevek , @mattjquinn , have you tried Gradle 5.5.1?
The issue seems to be fixed already: https://github.com/gradle/gradle/commit/a5436a4681109a2dc91892a2a3ee4223d6a3a70a

@vlsi  Nope, I just looked at the hashref you posted, and it contains the EXACT buggy callchain described in this issue: Two calls to methodNameColumnExists().

https://github.com/gradle/gradle/blob/a5436a4681109a2dc91892a2a3ee4223d6a3a70a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L54
https://github.com/gradle/gradle/blob/a5436a4681109a2dc91892a2a3ee4223d6a3a70a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L69

So this issue is NOT fixed.

@shevek ,  Even though the method is executed twice, it would not make much difference.
Can you provide a reproducer?
I'm quite sure current Gradle code would not spend 4 minutes in the methods in methodNameColumnExists

I can provide you a perf trace showing that it does.

Please do so. Even better would be if you could provide a project or unit-test to reproduce the behaviour.

Confirmed, jstack says it spent 2m30s in:
   java.lang.Thread.State: RUNNABLE
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer.methodNameColumnExists(ClassPageRenderer.java:91)
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer.determineTableRow(ClassPageRenderer.java:61)
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer.renderTableRow(ClassPageRenderer.java:80)
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer.renderTests(ClassPageRenderer.java:55)
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer.access$000(ClassPageRenderer.java:32)
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer$1.doExecute(ClassPageRenderer.java:119)

Here is 60 seconds of perf trace, which shows a slightly different answer; bear in mind that the horizontal width here represents 60 seconds out of the total 140-ish seconds of this call.
 The double green box top right is methodNameColumnExists. I would upload the interactive SVG if github would let me.
methodNameColumnExists MIGHT be slow because the underlying Map is a TreeMap, which is slow as a dog. I have no hypothesis about why renderTableRow is so slow.
Please fix this, at least part of the fix is trivial, and it takes FAR too much of our developers' time waiting for this.

I suspect if I grab a full 3 minute trace, the situation will appear worse, which it is.

@shevek , would you please capture results via https://github.com/jvm-profiling-tools/async-profiler ?

@shevek , would you please clarify which Gradle version do you use?
Please upgrade to Gradle 5.2.0 or later and close the issue.
There's nothing to do for Gradle team here.

shevek: Confirmed, jstack says it spent 2m30s in:

   java.lang.Thread.State: RUNNABLE
        at org.gradle.api.internal.tasks.testing.report.ClassPageRenderer.
methodNameColumnExists(ClassPageRenderer.java:91)

It is obvious that you are using OLD Gradle version, because line 91 is just EMPTY now:
https://github.com/gradle/gradle/blob/a5436a4681109a2dc91892a2a3ee4223d6a3a70a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L61

The bug is STILL PRESENT in 5.2.0. Upgrading will do nothing for me until you fix the bug. The post I made was already done using perf, which is already async, and not safepoint-sensitive.

The bug is STILL PRESENT in 5.2.0

I'm afraid you are wrong.
Here's a direct URL for version 5.2.0: https://github.com/gradle/gradle/blob/v5.2.0/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L61
The line 61 is empty.
The issue has already been fixed, so you just need to upgrade and that is it.

@vlsi Nope:
Call 1: https://github.com/gradle/gradle/blob/v5.2.0/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L69
Call 2: https://github.com/gradle/gradle/blob/v5.2.0/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L54
Both called from https://github.com/gradle/gradle/blob/v5.2.0/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/report/ClassPageRenderer.java#L50
Still present in 5.2.0, exactly as described above.

Still present in 5.2.0, exactly as described above.

Please upgrade to Gradle 5.2.0 (or later) and provide performace traces (e.g. async-profiler or jstack).
Your current analysis shows that you are using an outdated version, and you somehow fail to realize that what you need is https://github.com/gradle/gradle/commit/a5436a4681109a2dc91892a2a3ee4223d6a3a70a which comes in Gradle 5.2.0+

authors: mattjquinn shevek vlsi

repo: gradle/gradle


text:
Please consider adding a colorblind-safe color scheme for console output

Expected Behavior
There should be a way to use red-blue color scheme rather than red-green for console output.
Current Behavior
Gradle defaults to red-green colors which do not always work well.
Sample: https://twitter.com/CedricChampeau/status/1244969314102513664
Context
https://en.wikipedia.org/wiki/Color_blindness#Red–green_color_blindness

It seems it should already be kind-of possible, if I understand this test properly:
https://github.com/gradle/gradle/blob/master/subprojects/logging/src/test/groovy/org/gradle/internal/logging/console/DefaultColorMapTest.groovy#L52-L55
Now I tried to do something like that locally and I failed, so :man_shrugging:

authors: melix vlsi


text:
Unable to pass a list of dependencies to implementation when using Kotlin build script.

Kotlin build script does not allow list of maps as arguments of the methods implementation, compile, etc.. This is, however, possible with a Groovy build script
Expected Behavior
It is possible to pass a List<Map<String,String>> as dependency for each Configuration when using Kotlin build scripts, just like it is possible with Groovy build scripts.
Current Behavior
The following error occurs when running gradlew -Pkt-script=true --scan in this project (see Build scan):
FAILURE: Build failed with an exception.

* Where:
Build file 'C:\Users\loych\Downloads\gradle-issue-demo\kotlin-build-script\build.gradle.kts' line: 9

* What went wrong:
Cannot convert the provided notation to an object of type Dependency: [{group=com.google.guava, name=guava, version=30.1.1-jre}, {group=org.slf4j, name=slf4j-api, version=1.7.31}].
The following types/formats are supported:
  - Instances of Dependency.
  - String or CharSequence values, for example 'org.gradle:gradle-core:1.0'.
  - Maps, for example [group: 'org.gradle', name: 'gradle-core', version: '1.0'].
  - FileCollections, for example files('some.jar', 'someOther.jar').
  - Projects, for example project(':some:project:path').
  - ClassPathNotation, for example gradleApi().

Comprehensive documentation on dependency notations is available in DSL reference for DependencyHandler type.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s

Publishing build scan...
https://gradle.com/s/6al6vqdeslbsk

When running without the project property, and therefore without calling implementation(listOf(...)) in Kotlin, the build succeedes, even though I passed a list to implementation in the groovy build script.
Context
I use a global Groovy Expando as a poor-mans dependency catalogue. This Groovy expando has an attribute for each dependency/bundle. Dependencies are maps, while Dependency Bundles are lists of maps.
This allows me to add a whole suite of dependencies with a command like this:
dependencies {
    implementation deps.logging
}

I want to switch to Kotlin build scripts and would've expected something like this to work:
dependencies {
    implementation(deps.getProperty("logging"))
}

Steps to Reproduce

Clone https://github.com/beatbrot/gradle-issue-demo
Run gradlew -Pkt-script=true

I already figured out that the Groovy build script transforms a Collection of Maps into several method calls right here:
https://github.com/gradle/gradle/blob/b67064e9c4ff9c720023964c4adc6476066d08ec/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/dsl/dependencies/DynamicAddDependencyMethods.java#L58-L60
This does not happen for Kotlin build scripts.
Your Environment
A PC running Windows 10, Java 11 and Gradle 7.1.1
Build scan URL: https://gradle.com/s/6al6vqdeslbsk

You can use version catalog bundles for this.

Yes, I already mentioned this in my initial post.
Version catalogues are, however, still in preview. In addition to that, I think the Kotlin DSL still should support everything the Groovy DSL did. This would dramatically ease the migration from Groovy to Kotlin DSL.

Thank you for your interest in Gradle!
This issue will be closed as a duplicate of #7649. Please add your +1's to that issue.

authors: beatbrot melix mlopatkin


text:
Make source set JVM specific elements an extension of the java plugin instead of hard coded and the container easier to create

At the moment creating a source set for a custom plugin is such a nightmare that you always go for an other container, usually called sourceSets as well, inside your extension an you totally ignore the default one (if is there at all since it need to be initialized by the Java base plugin).
I would recommend to make all The sourceSet interface the most JVM agnostic as possible, always register the source sets in the project or create a base plugin that does so and make a JVM plugin that adds all those extensions.

Duplicates #831


text:
Contextual Additions to Error Messages for Missing Methods/Properties

Per the Spec here, we'd like to add a way to easily add contextual information to certain error messages from the Groovy DSL.

A proposed solution is here: https://github.com/gradle/gradle/pull/20825


text:
How do you define a gradle reproducer

Issue type
Missing information
Problem description
My gradle is not producing a valid meta inf manifest and I get back is this is not a valid reproducer with out telling me why and tell me to use the template even when I can’t because I used the init task to get a basic setup due to not being able to write build scripts by hand
I change gradle.bat to gradle.bat and modded it to use a portable jre due to not having admin if that was it I reverted those changes for the jre for your testing but it seems anything I give is invaild
Context (optional)
don’t just demand people use the template and explain what things are needed to match it for what you need
Probably getting blocked for this
Page with the problem
https://github.com/gradle/gradle/issues/26191#issuecomment-1731034061

I tried copying and editing a valid meta inf manifest it just got replaced by the broken one


text:
Test.classpath additions don't work unless the JVM Test Suite Plugin is applied first

Current Behavior
Test.classpath additions from a convention plugin don't work with the test task unless the JVM Test Suite Plugin is applied first.
Expected Behavior
The order the JVM Test Suite Plugin and a convention plugin (that appends to the Test.classpath property) are applied to a project shouldn't matter.
Context (optional)
Forum thread: https://discuss.gradle.org/t/how-to-properly-append-to-the-javaexec-and-test-task-classpaths/48169.
Reproducer that seems to demonstrate that the order task registration and corresponding withType() configuration are declared doesn't generally seem to matter: https://github.com/ianbrandt/gradle-task-configuration-ordering.
Similar issue with the JavaExec task: #28809.
Steps to Reproduce
Reproducer: https://github.com/ianbrandt/gradle-test-classpath
Plugin application order: https://github.com/ianbrandt/gradle-test-classpath/blob/kotlin-dsl/build.gradle.kts#L2
Classpath configuration: https://github.com/ianbrandt/gradle-test-classpath/blob/kotlin-dsl/buildSrc/src/main/kotlin/extra-classpath-convention.gradle.kts#L8
Test class: https://github.com/ianbrandt/gradle-test-classpath/blob/kotlin-dsl/src/test/kotlin/com/example/ExtraClasspathTest.kt#L9
When test is executed with the JVM Test Suite Plugin applied after the configuring convention plugin, it seems the test classpath is compromised:
org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not start Gradle Test Executor 14.
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.startProcessing(SuiteTestClassProcessor.java:44)
	at java.base@21.0.2/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.2/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.startProcessing(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$1.run(TestWorker.java:161)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: org.junit.platform.commons.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath
	at app//org.junit.platform.commons.util.Preconditions.condition(Preconditions.java:296)
	at app//org.junit.platform.launcher.core.DefaultLauncher.<init>(DefaultLauncher.java:55)
	at app//org.junit.platform.launcher.core.LauncherFactory.createDefaultLauncher(LauncherFactory.java:134)
	at app//org.junit.platform.launcher.core.LauncherFactory.openSession(LauncherFactory.java:98)
	at app//org.junit.platform.launcher.core.LauncherFactory.openSession(LauncherFactory.java:82)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$BackwardsCompatibleLauncherSession.open(JUnitPlatformTestClassProcessor.java:318)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.createTestExecutor(JUnitPlatformTestClassProcessor.java:81)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.startProcessing(AbstractJUnitTestClassProcessor.java:50)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.startProcessing(SuiteTestClassProcessor.java:42)
	... 16 more

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'com.example.ExtraClasspathTest'.
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:54)
	at java.base@21.0.2/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.2/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: java.lang.NullPointerException: Cannot invoke "org.gradle.api.Action.execute(Object)" because "this.executor" is null
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
	... 16 more

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not complete execution for Gradle Test Executor 14.
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:64)
	at java.base@21.0.2/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base@21.0.2/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: java.lang.NullPointerException: Cannot invoke "org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses()" because "x0" is null
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:94)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:89)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
	... 16 more

If the JVM Test Suite Plugin is applied first, the test task succeeds.
Gradle version
8.7
Build scan URL (optional)
https://scans.gradle.com/s/5h7ramwirhe3g
Your Environment (optional)
No response

The issue can be worked around by configuring the classpath in afterEvaluate:
https://github.com/ianbrandt/gradle-test-classpath/compare/kotlin-dsl...afterevaluate-workaround

Closing this as a duplicate of the previous issue, because the root cause is the same.

Similar to https://github.com/gradle/gradle/issues/28809#issuecomment-2061350255:
See https://github.com/gradle/gradle/blob/ddec0863e6206fec8cfddb67630a77c6cd135112/platforms/jvm/plugins-jvm-test-suite/src/main/java/org/gradle/api/plugins/JvmTestSuitePlugin.java#L104

There's a real issue with plugin ordering and how convention mapping (an internal feature that predates Property conventions) are applied. classpath += files(...) eagerly resolves the current value of classpath and disables all conventions from that point, so when your plugin is applied first, the conventions from JVM test suites are ignored.
A few ideas:

Instead of modifying Test directly, add the extra files to testRuntimeOnly. This can be the best solution because it exposes this extra path as a dependency vs modifying the task's inputs.
Instead of putting the extra files in another directory, put them in src/test/resources.  This can be the best solution because it doesn't require extra configuration.
In the convention plugin, react to the jvm-test-suite being applied and then add the extra directory to Test tasks (plugins.withId(...)).  This should work, but relies on ordering again.

We think this issue will be resolved after we migrate the Test task to use all Provider API types and remove the internal convention mappinig.

authors: big-guy ianbrandt ov7a


text:
Possibility to express artifact transform order restrictions

Expected Behavior
It would be nice to have some way to express order requirements for artifact transforms, or a way to filter or discard chains or similar.
Context
I have an artifact transform in a build that modifies the file names while transforming, in this case one that signs contained DLLs and thus also uses a new name so that it is clear those were modified.
I then added the extra-java-module-info plugin to the build.
Unfortunately the artifact transform in this plugin depends on the original filename.
Purely from attribute transformation point of view, the transforms can happen in any order to achieve the right result.
The problem is, if the SignDLLs transform runs first, the file name is different which makes the extra-java-module-info transform choke.
If the extra-java-module-info transform runs first, there is no problem at all.
But currently you have to make sure that the transforms are registered in the "correct" order, so that the chain-finding-algorithm handles them in the right order. This currently means I have to use a

This issue needs a decision from the team responsible for that area. They have been informed. Response time may vary.

This currently means I have to use a

@Vampire Can you please add details to this?

Argh, I hate it when GitHub ates part of my description, thanks for the notice. :-/
I hope I remembered what came after that, and added it.