diff --git a/.github/workflows/publish-sdk-python.yml b/.github/workflows/publish-sdk-python.yml index ac8c9fd9..928c9d11 100644 --- a/.github/workflows/publish-sdk-python.yml +++ b/.github/workflows/publish-sdk-python.yml @@ -2,8 +2,11 @@ name: Publish Python SDK on: push: - tags: - - 'sdk-py-v*' + branches: + - main + paths: + - 'sdks/python/pyproject.toml' + workflow_dispatch: jobs: publish: @@ -22,24 +25,35 @@ jobs: with: python-version: '3.12' - - name: Install build tools - run: pip install build twine + - name: Install uv + uses: astral-sh/setup-uv@v4 - - name: Extract version from tag + - name: Extract version from pyproject.toml id: version run: | - VERSION=${GITHUB_REF_NAME#sdk-py-v} + VERSION=$(grep -Po '(?<=^version = ")[^"]*' pyproject.toml) echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Update version in pyproject.toml + - name: Check if version already published + id: check run: | - sed -i "s/^version = .*/version = \"${{ steps.version.outputs.version }}\"/" pyproject.toml + HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://pypi.org/pypi/openrag-sdk/${{ steps.version.outputs.version }}/json) + if [ "$HTTP_STATUS" = "200" ]; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi - name: Build package - run: python -m build + if: steps.check.outputs.exists == 'false' + run: uv build - name: Publish to PyPI - run: twine upload dist/* + if: steps.check.outputs.exists == 'false' + run: uv publish env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} + UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }} + + - name: Skip publish (version exists) + if: steps.check.outputs.exists == 'true' + run: echo "Version ${{ steps.version.outputs.version }} already exists on PyPI, skipping publish" diff --git a/.github/workflows/publish-sdk-typescript.yml b/.github/workflows/publish-sdk-typescript.yml index 7471a5d5..7636a100 100644 --- a/.github/workflows/publish-sdk-typescript.yml +++ b/.github/workflows/publish-sdk-typescript.yml @@ -2,13 +2,19 @@ name: Publish TypeScript SDK on: push: - tags: - - 'sdk-ts-v*' + branches: + - main + paths: + - 'sdks/typescript/package.json' + workflow_dispatch: jobs: publish: name: Publish to npm runs-on: ubuntu-latest + permissions: + contents: read + id-token: write defaults: run: working-directory: sdks/typescript @@ -23,22 +29,36 @@ jobs: node-version: '20' registry-url: 'https://registry.npmjs.org' + - name: Update npm to latest + run: npm install -g npm@latest + + - name: Extract version from package.json + id: version + run: | + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - name: Check if version already published + id: check + run: | + if npm view openrag-sdk@${{ steps.version.outputs.version }} version 2>/dev/null; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + - name: Install dependencies + if: steps.check.outputs.exists == 'false' run: npm ci - name: Build + if: steps.check.outputs.exists == 'false' run: npm run build - - name: Extract version from tag - id: version - run: | - VERSION=${GITHUB_REF_NAME#sdk-ts-v} - echo "version=$VERSION" >> $GITHUB_OUTPUT - - - name: Update package version - run: npm version ${{ steps.version.outputs.version }} --no-git-tag-version - - name: Publish to npm - run: npm publish --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + if: steps.check.outputs.exists == 'false' + run: npm publish --access public --provenance + + - name: Skip publish (version exists) + if: steps.check.outputs.exists == 'true' + run: echo "Version ${{ steps.version.outputs.version }} already exists on npm, skipping publish" diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml index 5129e148..1697492c 100644 --- a/sdks/python/pyproject.toml +++ b/sdks/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "openrag-sdk" -version = "0.1.1" +version = "0.1.2" description = "Official Python SDK for OpenRAG API" readme = "README.md" license = "MIT" @@ -59,3 +59,4 @@ select = ["E", "F", "I", "UP"] [tool.mypy] python_version = "3.10" strict = true + diff --git a/sdks/typescript/package.json b/sdks/typescript/package.json index 3403a926..6d46c2b0 100644 --- a/sdks/typescript/package.json +++ b/sdks/typescript/package.json @@ -1,6 +1,6 @@ { "name": "openrag-sdk", - "version": "0.1.1", + "version": "0.1.2", "description": "Official TypeScript/JavaScript SDK for OpenRAG API", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -56,3 +56,4 @@ "node": ">=18.0.0" } } +