Skip to content

Commit d9d54d0

Browse files
authored
[PLT-0] Improve Overall Dev-X By Using Rye (#1492)
1 parent 57bdb0b commit d9d54d0

File tree

414 files changed

+1132
-521
lines changed

Some content is hidden

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

414 files changed

+1132
-521
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Labelbox Python SDK Shared Setup
2+
3+
inputs:
4+
rye-version:
5+
required: true
6+
python-version:
7+
required: true
8+
9+
runs:
10+
using: "composite"
11+
steps:
12+
- name: Install the latest version of rye
13+
uses: eifinger/setup-rye@v2
14+
with:
15+
version: ${{ inputs.rye-version }}
16+
enable-cache: true
17+
- name: Rye Setup
18+
shell: bash
19+
run: |
20+
rye config --set-bool behavior.use-uv=true
21+
- name: Python setup
22+
shell: bash
23+
run: rye pin ${{ inputs.python-version }}
24+
- name: Environment setup
25+
working-directory: libs/labelbox
26+
shell: bash
27+
run: |
28+
rye sync -f --update-all

.github/workflows/publish.yaml

Lines changed: 0 additions & 80 deletions
This file was deleted.

.github/workflows/publish.yml

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
name: Labelbox Python SDK Publish
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
tag:
7+
description: 'Release Tag'
8+
required: true
9+
skip-tests:
10+
description: 'Skip PROD Test (Do not do this unless there is an emergency)'
11+
default: 'false'
12+
required: true
13+
type: choice
14+
options:
15+
- false
16+
- true
17+
18+
19+
concurrency:
20+
group: ${{ github.workflow }}
21+
cancel-in-progress: false
22+
23+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
24+
permissions:
25+
contents: read
26+
pages: write
27+
id-token: write
28+
29+
jobs:
30+
build:
31+
runs-on: ubuntu-latest
32+
steps:
33+
- uses: actions/checkout@v4
34+
with:
35+
token: ${{ secrets.ACTIONS_ACCESS_TOKEN }}
36+
ref: ${{ inputs.tag }}
37+
- name: Install the latest version of rye
38+
uses: eifinger/setup-rye@v2
39+
with:
40+
version: ${{ vars.RYE_VERSION }}
41+
enable-cache: true
42+
- name: Rye Setup
43+
run: |
44+
rye config --set-bool behavior.use-uv=true
45+
- name: Create build
46+
working-directory: libs/labelbox
47+
run: |
48+
rye sync
49+
rye build
50+
- uses: actions/upload-artifact@v4
51+
with:
52+
name: build
53+
path: ./dist
54+
test-build:
55+
if: ${{ inputs.skip-tests }} != "true"
56+
needs: ['build']
57+
runs-on: ubuntu-latest
58+
strategy:
59+
fail-fast: false
60+
matrix:
61+
include:
62+
- python-version: 3.8
63+
prod-key: PROD_LABELBOX_API_KEY_2
64+
da-test-key: DA_GCP_LABELBOX_API_KEY
65+
- python-version: 3.9
66+
prod-key: PROD_LABELBOX_API_KEY_3
67+
da-test-key: DA_GCP_LABELBOX_API_KEY
68+
- python-version: "3.10"
69+
prod-key: PROD_LABELBOX_API_KEY_4
70+
da-test-key: DA_GCP_LABELBOX_API_KEY
71+
- python-version: 3.11
72+
prod-key: LABELBOX_API_KEY
73+
da-test-key: DA_GCP_LABELBOX_API_KEY
74+
- python-version: 3.12
75+
prod-key: PROD_LABELBOX_API_KEY_5
76+
da-test-key: DA_GCP_LABELBOX_API_KEY
77+
steps:
78+
- uses: actions/checkout@v4
79+
with:
80+
token: ${{ secrets.ACTIONS_ACCESS_TOKEN }}
81+
ref: ${{ inputs.tag }}
82+
- name: Install the latest version of rye
83+
uses: eifinger/setup-rye@v2
84+
with:
85+
version: ${{ vars.RYE_VERSION }}
86+
enable-cache: true
87+
- name: Rye Setup
88+
run: |
89+
rye config --set-bool behavior.use-uv=true
90+
- name: Python setup
91+
run: rye pin ${{ matrix.python-version }}
92+
- uses: actions/download-artifact@v4
93+
with:
94+
name: build
95+
path: ./dist
96+
- name: Prepare package and environment
97+
run: |
98+
rye sync
99+
rye run toml unset --toml-path pyproject.toml tool.rye.workspace
100+
rye sync -f --update-all
101+
- name: Integration Testing
102+
env:
103+
PYTEST_XDIST_AUTO_NUM_WORKERS: 32
104+
LABELBOX_TEST_API_KEY: ${{ secrets[matrix.prod-key] }}
105+
DA_GCP_LABELBOX_API_KEY: ${{ secrets[matrix.da-test-key] }}
106+
LABELBOX_TEST_ENVIRON: prod
107+
run: |
108+
rye add labelbox --path ./$(find ./dist/ -name *.tar.gz) --sync
109+
cd libs/labelbox
110+
rm pyproject.toml
111+
rye run pytest tests/integration
112+
- name: Data Testing
113+
env:
114+
PYTEST_XDIST_AUTO_NUM_WORKERS: 32
115+
LABELBOX_TEST_API_KEY: ${{ secrets[matrix.prod-key] }}
116+
DA_GCP_LABELBOX_API_KEY: ${{ secrets[matrix.da-test-key] }}
117+
LABELBOX_TEST_ENVIRON: prod
118+
run: |
119+
rye add labelbox --path ./$(find ./dist/ -name *.tar.gz) --sync --features data
120+
cd libs/labelbox
121+
rye run pytest tests/data
122+
pypi-publish:
123+
runs-on: ubuntu-latest
124+
needs: ['test-build']
125+
environment:
126+
name: publish
127+
url: 'https://pypi.org/project/labelbox/'
128+
permissions:
129+
# IMPORTANT: this permission is mandatory for trusted publishing
130+
id-token: write
131+
steps:
132+
- uses: actions/download-artifact@v4
133+
with:
134+
name: build
135+
- name: Publish package distributions to PyPI
136+
uses: pypa/gh-action-pypi-publish@release/v1
137+
with:
138+
packages-dir: artifact/
139+
container-publish:
140+
runs-on: ubuntu-latest
141+
needs: ['test-build']
142+
env:
143+
CONTAINER_IMAGE: "ghcr.io/${{ github.repository }}"
144+
steps:
145+
- name: downcase CONTAINER_IMAGE
146+
run: |
147+
echo "CONTAINER_IMAGE=${CONTAINER_IMAGE,,}" >> ${GITHUB_ENV}
148+
149+
- name: Set up Docker Buildx
150+
uses: docker/setup-buildx-action@v3
151+
152+
- name: Log in to the Container registry
153+
uses: docker/login-action@v3
154+
with:
155+
registry: ghcr.io
156+
username: ${{ github.actor }}
157+
password: ${{ secrets.GITHUB_TOKEN }}
158+
159+
- name: Build and push
160+
uses: docker/build-push-action@v5
161+
with:
162+
github-token: ${{ secrets.GITHUB_TOKEN }}
163+
push: true
164+
165+
platforms: |
166+
linux/amd64
167+
linux/arm64
168+
169+
tags: |
170+
${{ env.CONTAINER_IMAGE }}:latest
171+
${{ env.CONTAINER_IMAGE }}:${{ inputs.tag }}
172+
173+
# Note that the build and pypi-publish jobs are split so that the additional permissions are only granted to the pypi-publish job.

0 commit comments

Comments
 (0)