Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add a GitHub Action for generating new clients using the hermetic build scripts #10488

Merged

Conversation

diegomarquezp
Copy link
Contributor

@diegomarquezp diegomarquezp commented Mar 6, 2024

This PR enables new client generation using the hermetic build docker image.
It uses a combination of

Why a new workflow and README?

We do have https://github.com/googleapis/google-cloud-java/blob/main/.github/workflows/generate_new_client.yaml already, which relies on the (from now) old generation scripts. We are not replacing this workflow because we want to keep a fall back option in case anything happens while we roll out the hermetic build scripts.

Steps

  1. Calls a new script new_client_hermetic_build/new-client.py that adds an entry to generation_config.yaml with the specified arguments. The arguments are the 10 minimal arguments we find in https://github.com/googleapis/google-cloud-java/blob/main/.github/workflows/generate_new_client.yaml
    a. It will search for all versioned proto_paths found in the root proto_path. If the given proto_path is versioned, the script will fail with a message
  2. Calls the hermetic build docker image to generate this specific library using the updated config yaml
  3. Create a PR

Demo PR

diegomarquezp#19

Demo diff - generate cloudcontrolspartner with both github actions:

I generated the libraries using a more up-to-date googleapis_committish
We are currently ignoring differences in README and metadata['repo'] in our ITs

  • The branch new-library/cloudcontrolspartner-EvjMm comes from the old generation workflow
  • The branch new-library/cloudcontrolspartner-56m5l comes from the hermetic build generation
git diff diego/new-library/cloudcontrolspartner-EvjMm..diego/new-library/cloudcontrolspartner-56m5l -- java-cloudcontrolspartner
diff --git a/java-cloudcontrolspartner/.OwlBot.yaml b/java-cloudcontrolspartner/.OwlBot.yaml
index b6b792e566f..6346aacb42c 100644
--- a/java-cloudcontrolspartner/.OwlBot.yaml
+++ b/java-cloudcontrolspartner/.OwlBot.yaml
@@ -1,4 +1,4 @@
-# Copyright 2022 Google LLC
+# Copyright 2024 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -32,5 +32,4 @@ deep-copy-regex:
 - source: "/google/cloud/cloudcontrolspartner/(v.*)/.*-java/samples/snippets/generated"
   dest: "/owl-bot-staging/java-cloudcontrolspartner/$1/samples/snippets/generated"
 
-
 api-name: cloudcontrolspartner
\ No newline at end of file
diff --git a/java-cloudcontrolspartner/.repo-metadata.json b/java-cloudcontrolspartner/.repo-metadata.json
index b072ceee6b1..4fd68582938 100644
--- a/java-cloudcontrolspartner/.repo-metadata.json
+++ b/java-cloudcontrolspartner/.repo-metadata.json
@@ -7,7 +7,7 @@
   "release_level": "preview",
   "transport": "both",
   "language": "java",
-  "repo": "googleapis/java-cloudcontrolspartner",
+  "repo": "googleapis/google-cloud-java",
   "repo_short": "java-cloudcontrolspartner",
   "distribution_name": "com.google.cloud:google-cloud-cloudcontrolspartner",
   "api_id": "cloudcontrolspartner.googleapis.com",
diff --git a/java-cloudcontrolspartner/README.md b/java-cloudcontrolspartner/README.md
index cab3d60282b..6ef424d9f4a 100644
--- a/java-cloudcontrolspartner/README.md
+++ b/java-cloudcontrolspartner/README.md
@@ -189,16 +189,16 @@ Java is a registered trademark of Oracle and/or its affiliates.
 
 [product-docs]: https://cloud.google.com/sovereign-controls-by-partners/docs/sovereign-partners
 [javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-cloudcontrolspartner/latest/overview
-[kokoro-badge-image-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java7.svg
-[kokoro-badge-link-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java7.html
-[kokoro-badge-image-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java8.svg
-[kokoro-badge-link-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java8.html
-[kokoro-badge-image-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java8-osx.svg
-[kokoro-badge-link-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java8-osx.html
-[kokoro-badge-image-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java8-win.svg
-[kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java8-win.html
-[kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java11.svg
-[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-cloudcontrolspartner/java11.html
+[kokoro-badge-image-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java7.svg
+[kokoro-badge-link-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java7.html
+[kokoro-badge-image-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8.svg
+[kokoro-badge-link-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8.html
+[kokoro-badge-image-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-osx.svg
+[kokoro-badge-link-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-osx.html
+[kokoro-badge-image-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-win.svg
+[kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-win.html
+[kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.svg
+[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.html
 [stability-image]: https://img.shields.io/badge/stability-preview-yellow
 [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-cloudcontrolspartner.svg
 [maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-cloudcontrolspartner/0.1.0
@@ -210,9 +210,9 @@ Java is a registered trademark of Oracle and/or its affiliates.
 [create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects
 [cloud-cli]: https://cloud.google.com/cli
 [troubleshooting]: https://github.com/googleapis/google-cloud-java/blob/main/TROUBLESHOOTING.md
-[contributing]: https://github.com/googleapis/java-cloudcontrolspartner/blob/main/CONTRIBUTING.md
-[code-of-conduct]: https://github.com/googleapis/java-cloudcontrolspartner/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct
-[license]: https://github.com/googleapis/java-cloudcontrolspartner/blob/main/LICENSE
+[contributing]: https://github.com/googleapis/google-cloud-java/blob/main/CONTRIBUTING.md
+[code-of-conduct]: https://github.com/googleapis/google-cloud-java/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct
+[license]: https://github.com/googleapis/google-cloud-java/blob/main/LICENSE
 [enable-billing]: https://cloud.google.com/apis/docs/getting-started#enabling_billing
 [enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=cloudcontrolspartner.googleapis.com
 [libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM
diff --git a/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner-bom/pom.xml b/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner-bom/pom.xml
index 77a9be87d2b..ddbf9cf3cdd 100644
--- a/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner-bom/pom.xml
+++ b/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner-bom/pom.xml
@@ -1,11 +1,10 @@
-<?xml version="1.0"?>
+<?xml version='1.0' encoding='UTF-8'?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-cloudcontrolspartner-bom</artifactId>
   <version>0.0.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-cloudcontrolspartner:current} -->
   <packaging>pom</packaging>
-
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>google-cloud-pom-parent</artifactId>
diff --git a/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner/pom.xml b/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner/pom.xml
index 6f8cd66bd78..51f313ec22b 100644
--- a/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner/pom.xml
+++ b/java-cloudcontrolspartner/google-cloud-cloudcontrolspartner/pom.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version='1.0' encoding='UTF-8'?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.cloud</groupId>
@@ -119,4 +119,4 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1/pom.xml b/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1/pom.xml
index 7ef239f4ab3..026f5f6061c 100644
--- a/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1/pom.xml
+++ b/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1/pom.xml
@@ -42,4 +42,4 @@
       <artifactId>guava</artifactId>
     </dependency>
   </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1beta/pom.xml b/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1beta/pom.xml
index 272aef10f7c..305391719e1 100644
--- a/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1beta/pom.xml
+++ b/java-cloudcontrolspartner/grpc-google-cloud-cloudcontrolspartner-v1beta/pom.xml
@@ -42,4 +42,4 @@
       <artifactId>guava</artifactId>
     </dependency>
   </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/java-cloudcontrolspartner/owlbot.py b/java-cloudcontrolspartner/owlbot.py
index 03c0f6686d3..c2c142892a2 100644
--- a/java-cloudcontrolspartner/owlbot.py
+++ b/java-cloudcontrolspartner/owlbot.py
@@ -1,4 +1,4 @@
-# Copyright 2021 Google LLC
+# Copyright 2024 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -32,5 +32,5 @@ java.common_templates(monorepo=True, excludes=[
     "java.header",
     "license-checks.xml",
     "renovate.json",
-    ".gitignore"
+    ".gitignore",
 ])
\ No newline at end of file
diff --git a/java-cloudcontrolspartner/pom.xml b/java-cloudcontrolspartner/pom.xml
index d91127bdb8c..db3da51dac5 100644
--- a/java-cloudcontrolspartner/pom.xml
+++ b/java-cloudcontrolspartner/pom.xml
@@ -51,6 +51,7 @@
         <artifactId>proto-google-cloud-cloudcontrolspartner-v1</artifactId>
         <version>0.0.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-cloudcontrolspartner-v1:current} -->
       </dependency>
+
     </dependencies>
   </dependencyManagement>
 
@@ -62,4 +63,5 @@
     <module>proto-google-cloud-cloudcontrolspartner-v1</module>
     <module>google-cloud-cloudcontrolspartner-bom</module>
   </modules>
+
 </project>

@diegomarquezp diegomarquezp marked this pull request as ready for review March 7, 2024 01:11
@diegomarquezp diegomarquezp requested a review from a team as a code owner March 7, 2024 01:11
@diegomarquezp
Copy link
Contributor Author

From https://github.com/googleapis/google-cloud-java/actions/runs/8181196370/job/22370571531?pr=10488

gcr.io/cloud-devrel-public-resources/owlbot-java:latest
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/googleapis/googleapis-gen.git/'
Traceback (most recent call last):
  File "/home/runner/work/google-cloud-java/google-cloud-java/generation/new_client/new-client.py", line 399, in <module>
/home/runner/work/google-cloud-java/google-cloud-java/generation/new_client
    main()
  File "/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/runner/work/google-cloud-java/google-cloud-java/generation/new_client/new-client.py", line [28](https://github.com/googleapis/google-cloud-java/actions/runs/8181196370/job/22370571531?pr=10488#step:11:29)0, in generate
    subprocess.check_call(["git", "clone", "-q", googleapis_gen_url, "./gen/googleapis-gen"], cwd=workdir)
  File "/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/subprocess.py", line [37](https://github.com/googleapis/google-cloud-java/actions/runs/8181196370/job/22370571531?pr=10488#step:11:38)3, in check_call
Creating a new module /home/runner/work/google-cloud-java/google-cloud-java/java-apikeys
Cloning googleapis-gen...
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['git', 'clone', '-q', '***github.com/googleapis/googleapis-gen.git', './gen/googleapis-gen']' returned non-zero exit status 128.

WIP fix #10496

This is unrelated to the work of this PR

@diegomarquezp diegomarquezp changed the title chore: add GH action for new client using hermetic build scripts chore: adding a GH action for new client using hermetic build scripts Mar 12, 2024
@diegomarquezp diegomarquezp changed the title chore: adding a GH action for new client using hermetic build scripts chore: adding a GitHub Action for generating new clients using the hermetic build scripts Mar 12, 2024
Copy link
Member

@suztomo suztomo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's interesting that you had to create a new document and a new workflow.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename this file to something like add-new-client-config.py?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


client_documentation = f"https://cloud.google.com/java/docs/reference/{distribution_name_short}/latest/overview"

if library_name is None:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think library_name is not required and will be default to api_shortname in our scripts, so we don't have to specify it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, I removed this.

type: string
description: |
`proto_path`: Path to proto file from the root of the googleapis repository to the
directory that contains the proto files (without the version).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just use the versioned proto_path? I think it fits better since we can just add it as a GAPIC directly.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is to match the existing new-client.py script. The old one accepts root-level proto_paths, so a PR with all the released versions get created. See this example PR

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was initially forcing the user to provide a versioned path until I saw the behavior of the old script

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we have to follow the same behavior, its a tool that is used only by our own team, if the new behavior means less code and no additional toil, then we should go for it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we have to follow the same behavior, its a tool that is used only by our own team, if the new behavior means less code and no additional toil, then we should go for it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. As discussed, I modified the script to support versioned proto_paths only.

def __is_releasable_version(versioned_proto_path):
"""true if the library definition found in `versioned_proto_path`:
- has a BUILD file
- the BUILD file has a `java_gapic_assembly_gradle_pkg` rule
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any use case that the BUILD file does not have a java_gapic_assembly_gradle_pkg rule?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the heuristic we determined with @JoeWang1127 to tell if a library version has been released. @JoeWang1127 Would you mind adding a link to some doc or source to validate this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example, https://github.com/googleapis/googleapis/tree/master/google/bigtable/v1 has no BUILD file, but I'm still looking for one that doesn't have a java_gapic_assembly_gradle_pkg rule.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here is a search query of a few libraries that do not have the java_gapic_assembly_gradle_pkg rule.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm removing this logic in favor of supporting versioned proto_paths only

Copy link
Contributor

@JoeWang1127 JoeWang1127 Mar 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remembered I have seen an example of this, however I can't find it now.

We can ignore this case since we plan to use versioned proto_path.

name: Generate new GAPIC client library (Hermetic Build)
on:
workflow_dispatch:
# some inputs are ommited due to limit of 10 input arguments
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this is an existing limitation of Github actions, but IMO this is a indication that Github action may not be a good fit for new client library generation. Because we are clearly omitting some parameters here, they may not be "required" to generate a new library, but repo_metadata.json would be missing some info without those parameters.
I think we should find a different way sooner than later, but it would be out of scope for this PR. cc: @suztomo

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

repo_metadata.json would be missing some info without those parameters.

What are missing?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example, these four in repo_metadata.json, we might be able to get them heuristically, but if we want to override them, there is no way other than manually adding them.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we discussed today, the long term solution is to

  1. Make the PR generation logic more generic so that it can recognize any changes to the generation config
  2. Trigger the generation process on every generation config change.
  3. Create a PR(Manually or still use this Github action) that adds a new section for the new client, which should trigger the process above.
    CC: @JoeWang1127

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the example.

manually adding them.

The best way is to automatically get the data from the service config yaml.

return f'java-{library["api_shortname"]}'


def __get_proto_paths(proto_path: str, committish: str) -> List[str]:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole function can go away if we provide versioned proto path, so we have less code to maintain.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is an unintentional change?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Phew, yes it was. I restored it.

@@ -1,6 +1,6 @@
gapic_generator_version: 2.37.0
protobuf_version: '25.2'
googleapis_commitish: 6500290663163ba7dc6e0a35231772f5f78c3b62
googleapis_commitish: e960a82d36e3ddaeb62f549dbd4c300e11e240dc
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It shows as changing but it's the same as the latest:

googleapis_commitish: e960a82d36e3ddaeb62f549dbd4c300e11e240dc

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we revert this whole file?

Copy link
Contributor

@blakeli0 blakeli0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Please resolve merge conflict before merging.

@diegomarquezp diegomarquezp enabled auto-merge (squash) March 18, 2024 15:06
@diegomarquezp diegomarquezp added the owlbot:run Add this label to trigger the Owlbot post processor. label Mar 19, 2024
@gcf-owl-bot gcf-owl-bot bot removed the owlbot:run Add this label to trigger the Owlbot post processor. label Mar 19, 2024
@diegomarquezp diegomarquezp merged commit 341779c into googleapis:main Mar 19, 2024
31 of 33 checks passed
@diegomarquezp diegomarquezp changed the title chore: adding a GitHub Action for generating new clients using the hermetic build scripts chore: add a GitHub Action for generating new clients using the hermetic build scripts May 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants