Skip to content

Commit af51d4f

Browse files
chore: configure new SDK language
1 parent e4773bb commit af51d4f

File tree

114 files changed

+18521
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+18521
-1
lines changed

.devcontainer/Dockerfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
ARG VARIANT="3.9"
2+
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
3+
4+
USER vscode
5+
6+
RUN curl -sSf https://rye.astral.sh/get | RYE_VERSION="0.44.0" RYE_INSTALL_OPTION="--yes" bash
7+
ENV PATH=/home/vscode/.rye/shims:$PATH
8+
9+
RUN echo "[[ -d .venv ]] && source .venv/bin/activate || export PATH=\$PATH" >> /home/vscode/.bashrc

.devcontainer/devcontainer.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
2+
// README at: https://github.com/devcontainers/templates/tree/main/src/debian
3+
{
4+
"name": "Debian",
5+
"build": {
6+
"dockerfile": "Dockerfile",
7+
"context": ".."
8+
},
9+
10+
"postStartCommand": "rye sync --all-features",
11+
12+
"customizations": {
13+
"vscode": {
14+
"extensions": [
15+
"ms-python.python"
16+
],
17+
"settings": {
18+
"terminal.integrated.shell.linux": "/bin/bash",
19+
"python.pythonPath": ".venv/bin/python",
20+
"python.defaultInterpreterPath": ".venv/bin/python",
21+
"python.typeChecking": "basic",
22+
"terminal.integrated.env.linux": {
23+
"PATH": "/home/vscode/.rye/shims:${env:PATH}"
24+
}
25+
}
26+
}
27+
},
28+
"features": {
29+
"ghcr.io/devcontainers/features/node:1": {}
30+
}
31+
32+
// Features to add to the dev container. More info: https://containers.dev/features.
33+
// "features": {},
34+
35+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
36+
// "forwardPorts": [],
37+
38+
// Configure tool-specific properties.
39+
// "customizations": {},
40+
41+
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
42+
// "remoteUser": "root"
43+
}

.github/workflows/ci.yml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
name: CI
2+
on:
3+
push:
4+
branches-ignore:
5+
- 'generated'
6+
- 'codegen/**'
7+
- 'integrated/**'
8+
- 'stl-preview-head/**'
9+
- 'stl-preview-base/**'
10+
pull_request:
11+
branches-ignore:
12+
- 'stl-preview-head/**'
13+
- 'stl-preview-base/**'
14+
15+
jobs:
16+
lint:
17+
timeout-minutes: 10
18+
name: lint
19+
runs-on: ${{ github.repository == 'stainless-sdks/browser-use-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
20+
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- name: Install Rye
25+
run: |
26+
curl -sSf https://rye.astral.sh/get | bash
27+
echo "$HOME/.rye/shims" >> $GITHUB_PATH
28+
env:
29+
RYE_VERSION: '0.44.0'
30+
RYE_INSTALL_OPTION: '--yes'
31+
32+
- name: Install dependencies
33+
run: rye sync --all-features
34+
35+
- name: Run lints
36+
run: ./scripts/lint
37+
38+
build:
39+
if: github.repository == 'stainless-sdks/browser-use-python' && (github.event_name == 'push' || github.event.pull_request.head.repo.fork)
40+
timeout-minutes: 10
41+
name: build
42+
permissions:
43+
contents: read
44+
id-token: write
45+
runs-on: depot-ubuntu-24.04
46+
steps:
47+
- uses: actions/checkout@v4
48+
49+
- name: Install Rye
50+
run: |
51+
curl -sSf https://rye.astral.sh/get | bash
52+
echo "$HOME/.rye/shims" >> $GITHUB_PATH
53+
env:
54+
RYE_VERSION: '0.44.0'
55+
RYE_INSTALL_OPTION: '--yes'
56+
57+
- name: Install dependencies
58+
run: rye sync --all-features
59+
60+
- name: Run build
61+
run: rye build
62+
63+
- name: Get GitHub OIDC Token
64+
id: github-oidc
65+
uses: actions/github-script@v6
66+
with:
67+
script: core.setOutput('github_token', await core.getIDToken());
68+
69+
- name: Upload tarball
70+
env:
71+
URL: https://pkg.stainless.com/s
72+
AUTH: ${{ steps.github-oidc.outputs.github_token }}
73+
SHA: ${{ github.sha }}
74+
run: ./scripts/utils/upload-artifact.sh
75+
76+
test:
77+
timeout-minutes: 10
78+
name: test
79+
runs-on: ${{ github.repository == 'stainless-sdks/browser-use-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
80+
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
81+
steps:
82+
- uses: actions/checkout@v4
83+
84+
- name: Install Rye
85+
run: |
86+
curl -sSf https://rye.astral.sh/get | bash
87+
echo "$HOME/.rye/shims" >> $GITHUB_PATH
88+
env:
89+
RYE_VERSION: '0.44.0'
90+
RYE_INSTALL_OPTION: '--yes'
91+
92+
- name: Bootstrap
93+
run: ./scripts/bootstrap
94+
95+
- name: Run tests
96+
run: ./scripts/test

.gitignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.prism.log
2+
_dev
3+
4+
__pycache__
5+
.mypy_cache
6+
7+
dist
8+
9+
.venv
10+
.idea
11+
12+
.env
13+
.envrc
14+
codegen.log
15+
Brewfile.lock.json

.python-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.9.18

.stats.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
configured_endpoints: 22
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browser-use%2Fbrowser-use-86040fd18419e7b4e0947660d9c0ff1abe21550528d2d2a549736cd16f85a92d.yml
3+
openapi_spec_hash: 7c5de9d0f633db35fd9e250fcc834d1f
4+
config_hash: dc75baa00369cd029594734d872f6927

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"python.analysis.importFormat": "relative",
3+
}

Brewfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
brew "rye"
2+

CONTRIBUTING.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
## Setting up the environment
2+
3+
### With Rye
4+
5+
We use [Rye](https://rye.astral.sh/) to manage dependencies because it will automatically provision a Python environment with the expected Python version. To set it up, run:
6+
7+
```sh
8+
$ ./scripts/bootstrap
9+
```
10+
11+
Or [install Rye manually](https://rye.astral.sh/guide/installation/) and run:
12+
13+
```sh
14+
$ rye sync --all-features
15+
```
16+
17+
You can then run scripts using `rye run python script.py` or by activating the virtual environment:
18+
19+
```sh
20+
# Activate the virtual environment - https://docs.python.org/3/library/venv.html#how-venvs-work
21+
$ source .venv/bin/activate
22+
23+
# now you can omit the `rye run` prefix
24+
$ python script.py
25+
```
26+
27+
### Without Rye
28+
29+
Alternatively if you don't want to install `Rye`, you can stick with the standard `pip` setup by ensuring you have the Python version specified in `.python-version`, create a virtual environment however you desire and then install dependencies using this command:
30+
31+
```sh
32+
$ pip install -r requirements-dev.lock
33+
```
34+
35+
## Modifying/Adding code
36+
37+
Most of the SDK is generated code. Modifications to code will be persisted between generations, but may
38+
result in merge conflicts between manual patches and changes from the generator. The generator will never
39+
modify the contents of the `src/browser_use/lib/` and `examples/` directories.
40+
41+
## Adding and running examples
42+
43+
All files in the `examples/` directory are not modified by the generator and can be freely edited or added to.
44+
45+
```py
46+
# add an example to examples/<your-example>.py
47+
48+
#!/usr/bin/env -S rye run python
49+
50+
```
51+
52+
```sh
53+
$ chmod +x examples/<your-example>.py
54+
# run the example against your api
55+
$ ./examples/<your-example>.py
56+
```
57+
58+
## Using the repository from source
59+
60+
If you’d like to use the repository from source, you can either install from git or link to a cloned repository:
61+
62+
To install via git:
63+
64+
```sh
65+
$ pip install git+ssh://[email protected]/stainless-sdks/browser-use-python.git
66+
```
67+
68+
Alternatively, you can build from source and install the wheel file:
69+
70+
Building this package will create two files in the `dist/` directory, a `.tar.gz` containing the source files and a `.whl` that can be used to install the package efficiently.
71+
72+
To create a distributable version of the library, all you have to do is run this command:
73+
74+
```sh
75+
$ rye build
76+
# or
77+
$ python -m build
78+
```
79+
80+
Then to install:
81+
82+
```sh
83+
$ pip install ./path-to-wheel-file.whl
84+
```
85+
86+
## Running tests
87+
88+
Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.
89+
90+
```sh
91+
# you will need npm installed
92+
$ npx prism mock path/to/your/openapi.yml
93+
```
94+
95+
```sh
96+
$ ./scripts/test
97+
```
98+
99+
## Linting and formatting
100+
101+
This repository uses [ruff](https://github.com/astral-sh/ruff) and
102+
[black](https://github.com/psf/black) to format the code in the repository.
103+
104+
To lint:
105+
106+
```sh
107+
$ ./scripts/lint
108+
```
109+
110+
To format and fix all ruff issues automatically:
111+
112+
```sh
113+
$ ./scripts/format
114+
```
115+
116+
## Publishing and releases
117+
118+
Changes made to this repository via the automated release PR pipeline should publish to PyPI automatically. If
119+
the changes aren't made through the automated pipeline, you may want to make releases manually.
120+
121+
### Publish with a GitHub workflow
122+
123+
You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/stainless-sdks/browser-use-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up.
124+
125+
### Publish manually
126+
127+
If you need to manually release a package, you can run the `bin/publish-pypi` script with a `PYPI_TOKEN` set on
128+
the environment.

0 commit comments

Comments
 (0)