diff --git a/.github/workflows/update-sdk-definitions.yaml b/.github/workflows/update-sdk-definitions.yaml new file mode 100644 index 00000000..7bcdb22d --- /dev/null +++ b/.github/workflows/update-sdk-definitions.yaml @@ -0,0 +1,100 @@ +name: Update SDK definitions + +on: + schedule: + - cron: "0 8 * * *" # daily at 08:00 UTC + workflow_dispatch: + repository_dispatch: + types: [update-sdk-definitions] + +permissions: + contents: write + pull-requests: write + +jobs: + update-definitions: + name: Regenerate SDK clients from upstream OpenAPI specs + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: main + + - name: Setup Bun + uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76 # v2.0.2 + + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642195f2b846f73898f2e17 # v4.4.0 + with: + node-version: "22" + + - name: Install dependencies + run: bun install + + - name: Regenerate sandbox SDK client + run: | + echo "Downloading sandbox definition from blaxel-ai/sandbox" + curl -sf -o ./definition.yml \ + "https://raw.githubusercontent.com/blaxel-ai/sandbox/refs/heads/main/sandbox-api/docs/openapi.yml" + + rm -rf @blaxel/core/src/sandbox/client/types.gen.ts @blaxel/core/src/sandbox/client/sdk.gen.ts + npx @hey-api/openapi-ts@0.66.0 -i ./definition.yml -o ./tmp/ -c @hey-api/client-fetch + cp -r ./tmp/* @blaxel/core/src/sandbox/client + + sed -i 's/from '\''\.\/sdk\.gen'\''/from '\''\.\/sdk\.gen\.js'\''/g' @blaxel/core/src/sandbox/client/index.ts + sed -i 's/from '\''\.\/types\.gen'\''/from '\''\.\/types\.gen\.js'\''/g' @blaxel/core/src/sandbox/client/index.ts + rm -rf ./tmp definition.yml + + - name: Regenerate controlplane SDK client + run: | + echo "Downloading controlplane definition from blaxel-ai/controlplane" + curl -sf -o ./definition.yml \ + "https://api.blaxel.ai/v0/openapi/controlplane.yml" + + rm -rf @blaxel/core/src/client/types.gen.ts @blaxel/core/src/client/sdk.gen.ts + npx @hey-api/openapi-ts@0.66.0 -i ./definition.yml -o ./tmp/ -c @hey-api/client-fetch + cp -r ./tmp/* @blaxel/core/src/client + + sed -i 's/from '\''\.\/sdk\.gen'\''/from '\''\.\/sdk\.gen\.js'\''/g' @blaxel/core/src/client/index.ts + sed -i 's/from '\''\.\/types\.gen'\''/from '\''\.\/types\.gen\.js'\''/g' @blaxel/core/src/client/index.ts + sed -i 's/from '\''\.\/types\.gen'\''/from '\''\.\/types\.gen\.js'\''/g' @blaxel/core/src/client/sdk.gen.ts + perl -i -0777 -pe 's/(\{\s*scheme: .bearer.,\s*type: .http.\s*\}),\s*\{\s*scheme: .bearer.,\s*type: .http.\s*\}/$1/g' @blaxel/core/src/client/sdk.gen.ts + sed -i 's/\([A-Za-z_][A-Za-z0-9_]*\)Readable/\1/g' @blaxel/core/src/client/types.gen.ts + sed -i 's/TimeFieldsWritable/TimeFields/g' @blaxel/core/src/client/types.gen.ts + sed -i 's/OwnerFieldsWritable/OwnerFields/g' @blaxel/core/src/client/types.gen.ts + sed -i 's/export type Function =/export type _Function =/g' @blaxel/core/src/client/types.gen.ts + sed -i 's/: Function;/: _Function;/g' @blaxel/core/src/client/types.gen.ts + sed -i 's//<_Function>/g' @blaxel/core/src/client/types.gen.ts + echo '' >> @blaxel/core/src/client/types.gen.ts + echo 'export type DriveStateWritable = DriveState;' >> @blaxel/core/src/client/types.gen.ts + rm -rf ./tmp definition.yml + + - name: Check for changes + id: diff + run: | + if [ -z "$(git status --porcelain)" ]; then + echo "changed=false" >> "$GITHUB_OUTPUT" + echo "No definition changes detected" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + echo "Definition changes detected:" + git status --short + fi + + - name: Create pull request + if: steps.diff.outputs.changed == 'true' + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: automated/update-sdk-definitions + commit-message: "chore: update SDK definitions from upstream OpenAPI specs" + title: "chore: update SDK definitions from upstream OpenAPI specs" + body: | + Automated PR to sync the generated SDK clients with the latest OpenAPI specs from: + - [`blaxel-ai/sandbox`](https://github.com/blaxel-ai/sandbox) (sandbox client) + - [`blaxel-ai/controlplane`](https://github.com/blaxel-ai/controlplane) (controlplane client) + + Generated by the **Update SDK definitions** workflow. + labels: automated + delete-branch: true