mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-12-03 09:53:45 +00:00
chore(ci): setup automated stainless builds (#3557)
Some checks failed
SqlStore Integration Tests / test-postgres (3.13) (push) Failing after 0s
Integration Auth Tests / test-matrix (oauth2_token) (push) Failing after 1s
SqlStore Integration Tests / test-postgres (3.12) (push) Failing after 0s
Python Package Build Test / build (3.12) (push) Failing after 1s
Test External Providers Installed via Module / test-external-providers-from-module (venv) (push) Has been skipped
Vector IO Integration Tests / test-matrix (push) Failing after 4s
Integration Tests (Replay) / generate-matrix (push) Successful in 6s
Unit Tests / unit-tests (3.13) (push) Failing after 4s
Python Package Build Test / build (3.13) (push) Failing after 9s
API Conformance Tests / check-schema-compatibility (push) Successful in 15s
Unit Tests / unit-tests (3.12) (push) Failing after 13s
Pre-commit / pre-commit (push) Failing after 21s
Test External API and Providers / test-external (venv) (push) Failing after 22s
Integration Tests (Replay) / Integration Tests (, , , client=, ) (push) Failing after 18s
UI Tests / ui-tests (22) (push) Successful in 1m7s
Some checks failed
SqlStore Integration Tests / test-postgres (3.13) (push) Failing after 0s
Integration Auth Tests / test-matrix (oauth2_token) (push) Failing after 1s
SqlStore Integration Tests / test-postgres (3.12) (push) Failing after 0s
Python Package Build Test / build (3.12) (push) Failing after 1s
Test External Providers Installed via Module / test-external-providers-from-module (venv) (push) Has been skipped
Vector IO Integration Tests / test-matrix (push) Failing after 4s
Integration Tests (Replay) / generate-matrix (push) Successful in 6s
Unit Tests / unit-tests (3.13) (push) Failing after 4s
Python Package Build Test / build (3.13) (push) Failing after 9s
API Conformance Tests / check-schema-compatibility (push) Successful in 15s
Unit Tests / unit-tests (3.12) (push) Failing after 13s
Pre-commit / pre-commit (push) Failing after 21s
Test External API and Providers / test-external (venv) (push) Failing after 22s
Integration Tests (Replay) / Integration Tests (, , , client=, ) (push) Failing after 18s
UI Tests / ui-tests (22) (push) Successful in 1m7s
# What does this PR do? <!-- Provide a short summary of what this PR does and why. Link to relevant issues if applicable. --> This pull request adds a new workflow that does 2 things: 1. generate [SDK preview builds](https://www.stainless.com/docs/guides/automate-updates#set-up-automatic-preview-builds) whenever the OpenAPI spec file is modified in a PR 2. on PR merge, generate SDK builds that will be pushed to the different SDK repos (i.e start the release process) > [!NOTE] > No repo secret `STAINLESS_API_KEY` is needed, the authentication is done automatically via GitHub OIDC. <!-- If resolving an issue, uncomment and update the line below --> <!-- Closes #[issue-number] --> ## Test Plan <!-- Describe the tests you ran to verify your changes with result summaries. *Provide clear instructions so the plan can be easily re-executed.* --> I tested in my fork: https://github.com/stainless-api/llama-stack/pull/3
This commit is contained in:
parent
aa2bd82b1d
commit
8f4c431370
4 changed files with 126 additions and 11 deletions
1
.github/workflows/README.md
vendored
1
.github/workflows/README.md
vendored
|
|
@ -18,6 +18,7 @@ Llama Stack uses GitHub Actions for Continuous Integration (CI). Below is a tabl
|
||||||
| Python Package Build Test | [python-build-test.yml](python-build-test.yml) | Test building the llama-stack PyPI project |
|
| Python Package Build Test | [python-build-test.yml](python-build-test.yml) | Test building the llama-stack PyPI project |
|
||||||
| Integration Tests (Record) | [record-integration-tests.yml](record-integration-tests.yml) | Run the integration test suite from tests/integration |
|
| Integration Tests (Record) | [record-integration-tests.yml](record-integration-tests.yml) | Run the integration test suite from tests/integration |
|
||||||
| Check semantic PR titles | [semantic-pr.yml](semantic-pr.yml) | Ensure that PR titles follow the conventional commit spec |
|
| Check semantic PR titles | [semantic-pr.yml](semantic-pr.yml) | Ensure that PR titles follow the conventional commit spec |
|
||||||
|
| Stainless SDK Builds | [stainless-builds.yml](stainless-builds.yml) | Build Stainless SDK from OpenAPI spec changes |
|
||||||
| Close stale issues and PRs | [stale_bot.yml](stale_bot.yml) | Run the Stale Bot action |
|
| Close stale issues and PRs | [stale_bot.yml](stale_bot.yml) | Run the Stale Bot action |
|
||||||
| Test External Providers Installed via Module | [test-external-provider-module.yml](test-external-provider-module.yml) | Test External Provider installation via Python module |
|
| Test External Providers Installed via Module | [test-external-provider-module.yml](test-external-provider-module.yml) | Test External Provider installation via Python module |
|
||||||
| Test External API and Providers | [test-external.yml](test-external.yml) | Test the External API and Provider mechanisms |
|
| Test External API and Providers | [test-external.yml](test-external.yml) | Test the External API and Provider mechanisms |
|
||||||
|
|
|
||||||
110
.github/workflows/stainless-builds.yml
vendored
Normal file
110
.github/workflows/stainless-builds.yml
vendored
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
name: Stainless SDK Builds
|
||||||
|
run-name: Build Stainless SDK from OpenAPI spec changes
|
||||||
|
|
||||||
|
# This workflow uses pull_request_target, which allows it to run on pull requests
|
||||||
|
# from forks with access to secrets. This is safe because the workflow definition
|
||||||
|
# comes from the base branch (trusted), and the action only reads OpenAPI spec
|
||||||
|
# files without executing any code from the PR.
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- reopened
|
||||||
|
- closed
|
||||||
|
paths:
|
||||||
|
- "client-sdks/stainless/**"
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Stainless organization name.
|
||||||
|
STAINLESS_ORG: llamastack
|
||||||
|
|
||||||
|
# Stainless project name.
|
||||||
|
STAINLESS_PROJECT: llama-stack-client
|
||||||
|
|
||||||
|
# Path to your OpenAPI spec.
|
||||||
|
OAS_PATH: ./client-sdks/stainless/openapi.yml
|
||||||
|
|
||||||
|
# Path to your Stainless config. Optional; only provide this if you prefer
|
||||||
|
# to maintain the ground truth Stainless config in your own repo.
|
||||||
|
CONFIG_PATH: ./client-sdks/stainless/config.yml
|
||||||
|
|
||||||
|
# When to fail the job based on build conclusion.
|
||||||
|
# Options: "never" | "note" | "warning" | "error" | "fatal".
|
||||||
|
FAIL_ON: error
|
||||||
|
|
||||||
|
# In your repo secrets, configure:
|
||||||
|
# - STAINLESS_API_KEY: a Stainless API key, which you can generate on the
|
||||||
|
# Stainless organization dashboard
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
preview:
|
||||||
|
if: github.event.action != 'closed'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
# Checkout the PR's code to access the OpenAPI spec and config files.
|
||||||
|
# This is necessary to read the spec/config from the PR (including from forks).
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
# This action builds preview SDKs from the OpenAPI spec changes and
|
||||||
|
# posts/updates a comment on the PR with build results and links to the preview.
|
||||||
|
- name: Run preview builds
|
||||||
|
uses: stainless-api/upload-openapi-spec-action/preview@32823b096b4319c53ee948d702d9052873af485f # 1.6.0
|
||||||
|
with:
|
||||||
|
stainless_api_key: ${{ secrets.STAINLESS_API_KEY }}
|
||||||
|
org: ${{ env.STAINLESS_ORG }}
|
||||||
|
project: ${{ env.STAINLESS_PROJECT }}
|
||||||
|
oas_path: ${{ env.OAS_PATH }}
|
||||||
|
config_path: ${{ env.CONFIG_PATH }}
|
||||||
|
fail_on: ${{ env.FAIL_ON }}
|
||||||
|
base_sha: ${{ github.event.pull_request.base.sha }}
|
||||||
|
base_ref: ${{ github.event.pull_request.base.ref }}
|
||||||
|
head_sha: ${{ github.event.pull_request.head.sha }}
|
||||||
|
|
||||||
|
merge:
|
||||||
|
if: github.event.action == 'closed' && github.event.pull_request.merged == true
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
# Checkout the PR's code to access the OpenAPI spec and config files.
|
||||||
|
# This is necessary to read the spec/config from the PR (including from forks).
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
# Note that this only merges in changes that happened on the last build on
|
||||||
|
# preview/${{ github.head_ref }}. It's possible that there are OAS/config
|
||||||
|
# changes that haven't been built, if the preview-sdk job didn't finish
|
||||||
|
# before this step starts. In theory we want to wait for all builds
|
||||||
|
# against preview/${{ github.head_ref }} to complete, but assuming that
|
||||||
|
# the preview-sdk job happens before the PR merge, it should be fine.
|
||||||
|
- name: Run merge build
|
||||||
|
uses: stainless-api/upload-openapi-spec-action/merge@32823b096b4319c53ee948d702d9052873af485f # 1.6.0
|
||||||
|
with:
|
||||||
|
stainless_api_key: ${{ secrets.STAINLESS_API_KEY }}
|
||||||
|
org: ${{ env.STAINLESS_ORG }}
|
||||||
|
project: ${{ env.STAINLESS_PROJECT }}
|
||||||
|
oas_path: ${{ env.OAS_PATH }}
|
||||||
|
config_path: ${{ env.CONFIG_PATH }}
|
||||||
|
fail_on: ${{ env.FAIL_ON }}
|
||||||
|
base_sha: ${{ github.event.pull_request.base.sha }}
|
||||||
|
base_ref: ${{ github.event.pull_request.base.ref }}
|
||||||
|
head_sha: ${{ github.event.pull_request.head.sha }}
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
These are the source-of-truth configuration files used to generate the Stainless client SDKs via Stainless.
|
These are the source-of-truth configuration files used to generate the Stainless client SDKs via Stainless.
|
||||||
|
|
||||||
- `openapi.yml`: this is the OpenAPI specification for the Llama Stack API.
|
- `openapi.yml`: this is the OpenAPI specification for the Llama Stack API.
|
||||||
- `openapi.stainless.yml`: this is the Stainless _configuration_ which instructs Stainless how to generate the client SDKs.
|
- `config.yml`: this is the Stainless _configuration_ which instructs Stainless how to generate the client SDKs.
|
||||||
|
|
||||||
A small side note: notice the `.yml` suffixes since Stainless uses that suffix typically for its configuration files.
|
A small side note: notice the `.yml` suffixes since Stainless uses that suffix typically for its configuration files.
|
||||||
|
|
||||||
These files go hand-in-hand. As of now, only the `openapi.yml` file is automatically generated using the `run_openapi_generator.sh` script.
|
These files go hand-in-hand. As of now, only the `openapi.yml` file is automatically generated using the `run_openapi_generator.sh` script.
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,9 @@ resources:
|
||||||
sampling_params: SamplingParams
|
sampling_params: SamplingParams
|
||||||
scoring_result: ScoringResult
|
scoring_result: ScoringResult
|
||||||
system_message: SystemMessage
|
system_message: SystemMessage
|
||||||
|
query_result: RAGQueryResult
|
||||||
|
document: RAGDocument
|
||||||
|
query_config: RAGQueryConfig
|
||||||
toolgroups:
|
toolgroups:
|
||||||
models:
|
models:
|
||||||
tool_group: ToolGroup
|
tool_group: ToolGroup
|
||||||
|
|
@ -140,6 +143,11 @@ resources:
|
||||||
endpoint: get /v1/tool-runtime/list-tools
|
endpoint: get /v1/tool-runtime/list-tools
|
||||||
paginated: false
|
paginated: false
|
||||||
invoke_tool: post /v1/tool-runtime/invoke
|
invoke_tool: post /v1/tool-runtime/invoke
|
||||||
|
subresources:
|
||||||
|
rag_tool:
|
||||||
|
methods:
|
||||||
|
insert: post /v1/tool-runtime/rag-tool/insert
|
||||||
|
query: post /v1/tool-runtime/rag-tool/query
|
||||||
|
|
||||||
responses:
|
responses:
|
||||||
models:
|
models:
|
||||||
|
|
@ -332,21 +340,18 @@ resources:
|
||||||
endpoint: get /v1/inspect/routes
|
endpoint: get /v1/inspect/routes
|
||||||
paginated: false
|
paginated: false
|
||||||
|
|
||||||
|
|
||||||
moderations:
|
moderations:
|
||||||
models:
|
models:
|
||||||
create_response: ModerationObject
|
create_response: ModerationObject
|
||||||
methods:
|
methods:
|
||||||
create: post /v1/moderations
|
create: post /v1/moderations
|
||||||
|
|
||||||
|
|
||||||
safety:
|
safety:
|
||||||
models:
|
models:
|
||||||
run_shield_response: RunShieldResponse
|
run_shield_response: RunShieldResponse
|
||||||
methods:
|
methods:
|
||||||
run_shield: post /v1/safety/run-shield
|
run_shield: post /v1/safety/run-shield
|
||||||
|
|
||||||
|
|
||||||
shields:
|
shields:
|
||||||
models:
|
models:
|
||||||
shield: Shield
|
shield: Shield
|
||||||
|
|
@ -455,10 +460,9 @@ resources:
|
||||||
iterrows: get /v1beta/datasetio/iterrows/{dataset_id}
|
iterrows: get /v1beta/datasetio/iterrows/{dataset_id}
|
||||||
appendrows: post /v1beta/datasetio/append-rows/{dataset_id}
|
appendrows: post /v1beta/datasetio/append-rows/{dataset_id}
|
||||||
|
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
license: MIT
|
license: MIT
|
||||||
unwrap_response_fields: [ data ]
|
unwrap_response_fields: [data]
|
||||||
|
|
||||||
openapi:
|
openapi:
|
||||||
transformations:
|
transformations:
|
||||||
|
|
@ -466,7 +470,7 @@ openapi:
|
||||||
reason: Better return_type using enum
|
reason: Better return_type using enum
|
||||||
args:
|
args:
|
||||||
target:
|
target:
|
||||||
- '$.components.schemas'
|
- "$.components.schemas"
|
||||||
object:
|
object:
|
||||||
ReturnType:
|
ReturnType:
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
@ -491,10 +495,10 @@ openapi:
|
||||||
args:
|
args:
|
||||||
filter:
|
filter:
|
||||||
only:
|
only:
|
||||||
- '$.components.schemas.ScoringFn.properties.return_type'
|
- "$.components.schemas.ScoringFn.properties.return_type"
|
||||||
- '$.components.schemas.RegisterScoringFunctionRequest.properties.return_type'
|
- "$.components.schemas.RegisterScoringFunctionRequest.properties.return_type"
|
||||||
value:
|
value:
|
||||||
$ref: '#/components/schemas/ReturnType'
|
$ref: "#/components/schemas/ReturnType"
|
||||||
- command: oneOfToAnyOf
|
- command: oneOfToAnyOf
|
||||||
reason: Prism (mock server) doesn't like one of our requests as it technically matches multiple variants
|
reason: Prism (mock server) doesn't like one of our requests as it technically matches multiple variants
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue