From 4c41fa79fcafa53f9925355c3baec744a10b6459 Mon Sep 17 00:00:00 2001 From: Dogukan Karatas <61163577+dogukankaratas@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:51:39 +0200 Subject: [PATCH] feat(specklepy): publish to pypi (#396) * updates publish.yml * added the secrets * update publish.yml * updates workflow * updates workflows * Update github-action.yml * updates github action * updates docker-compose and deletes .devcontainer * disables pytests * changes the localhost * rollback - comment out the tests --------- Co-authored-by: KatKatKateryna <89912278+KatKatKateryna@users.noreply.github.com> --- .devcontainer/Dockerfile | 27 -------------- .devcontainer/devcontainer.json | 55 ----------------------------- .devcontainer/docker-compose.yaml | 44 ----------------------- .github/workflows/github-action.yml | 7 ++-- .github/workflows/publish.yml | 47 ++++++++++++++++-------- docker-compose.yml | 7 ++-- 6 files changed, 40 insertions(+), 147 deletions(-) delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .devcontainer/docker-compose.yaml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 69b160b..0000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/blob/main/containers/python-3/.devcontainer/base.Dockerfile - -# [Choice] Python version: 3, 3.9, 3.8, 3.7, 3.6 -ARG VARIANT="3.10" -FROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT} - -# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 -ARG NODE_VERSION="16" -RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi - -# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image. -# COPY requirements.txt /tmp/pip-tmp/ -# RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \ -# && rm -rf /tmp/pip-tmp - -# [Optional] Uncomment this section to install additional OS packages. -# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ -# && apt-get -y install --no-install-recommends - -# [Optional] Uncomment this line to install global node packages. -# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 - -USER vscode - -RUN curl -sSL https://install.python-poetry.org | python3 - - -ENV PATH=$PATH:$HOME/.poetry/env diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index e25b6be..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,55 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.191.1/containers/python-3 -{ - "name": "Python 3", - // "build": { - // "dockerfile": "Dockerfile", - // "context": "..", - // "args": { - // // Update 'VARIANT' to pick a Python version: 3, 3.6, 3.7, 3.8, 3.9 - // "VARIANT": "3.6", - // // Options - // "NODE_VERSION": "lts/*" - // } - // }, - "dockerComposeFile": "./docker-compose.yaml", - "service": "specklepy", - "workspaceFolder": "/workspaces/specklepy", - "shutdownAction": "stopCompose", - // Set *default* container specific settings.json values on container create. - "settings": { - "python.pythonPath": "/usr/local/bin/python", - "python.languageServer": "Pylance", - "python.linting.enabled": true, - "python.linting.pylintEnabled": true, - "python.linting.pylintArgs": [ - "--max-line-length=120" - ], - "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", - "python.formatting.blackPath": "/usr/local/py-utils/bin/black", - "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", - "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", - "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", - "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", - "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", - "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", - "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint", - "python.testing.pytestArgs": [ - "tests/", - "-s" - ], - "python.testing.pytestEnabled": true, - "editor.formatOnSave": true, - }, - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "ms-python.python", - "ms-python.vscode-pylance" - ], - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "poetry config virtualenvs.create false && poetry install", - // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "vscode" -} diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml deleted file mode 100644 index 6bfc147..0000000 --- a/.devcontainer/docker-compose.yaml +++ /dev/null @@ -1,44 +0,0 @@ -version: "3.3" # optional since v1.27.0 -services: - postgres: - image: cimg/postgres:14.2 - environment: - POSTGRES_DB: speckle2_test - POSTGRES_PASSWORD: speckle - POSTGRES_USER: speckle - network_mode: host - redis: - image: cimg/redis:6.2 - network_mode: host - speckle-server: - image: speckle/speckle-server:latest - command: ["bash", "-c", "/wait && node bin/www"] - environment: - POSTGRES_URL: "localhost" - POSTGRES_USER: "speckle" - POSTGRES_PASSWORD: "speckle" - POSTGRES_DB: "speckle2_test" - REDIS_URL: "redis://localhost" - SESSION_SECRET: "keyboard cat" - STRATEGY_LOCAL: "true" - CANONICAL_URL: "http://localhost:3000" - WAIT_HOSTS: localhost:5432, localhost:6379 - DISABLE_FILE_UPLOADS: "true" - network_mode: host - - specklepy: - build: - dockerfile: Dockerfile - context: . - args: - VARIANT: 3.9 - NODE_VERSION: lts/* - volumes: - # Mounts the project folder to '/workspace'. While this file is in .devcontainer, - # mounts are relative to the first file in the list, which is a level up. - - ..:/workspaces/specklepy:cached - # Overrides default command so things don't shut down after the process ends. - command: /bin/sh -c "while sleep 1000; do :; done" - network_mode: host -# networks: -# default: diff --git a/.github/workflows/github-action.yml b/.github/workflows/github-action.yml index c823c12..e9652d0 100644 --- a/.github/workflows/github-action.yml +++ b/.github/workflows/github-action.yml @@ -6,6 +6,9 @@ on: push: branches: - "v3-dev" + tags: + - "v3.*.*" + jobs: ci: name: continuous-integration @@ -39,8 +42,8 @@ jobs: - name: Run pre-commit run: uv run pre-commit run --all-files - # - name: Run Speckle Server - # run: docker compose up -d + - name: Run Speckle Server + run: docker compose up -d # - name: Run tests # run: uv run pytest --cov --cov-report xml:reports/coverage.xml --junitxml=reports/test-results.xml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2dbd101..b139804 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,31 +1,48 @@ -# Publish a release to PyPI. -name: "Publish to PyPI" - +name: "Publish Python Package" on: - push: - branches: - - "v3-dev" + workflow_run: + workflows: [Specklepy test and build] + types: + - completed jobs: - pypi-publish: - name: Upload to PyPI + publish-package: + name: "Build and Publish Python Package" runs-on: ubuntu-latest + + # set the environment based on what triggered the workflow environment: - name: testpypi + name: ${{ contains(github.ref, 'refs/tags/v3') && 'pypi' || 'testpypi' }} + permissions: - # For PyPI's trusted publishing. id-token: write + steps: - name: "Install uv" uses: astral-sh/setup-uv@v5 - - uses: actions/checkout@v4 + + - name: "Checkout code" + uses: actions/checkout@v4 with: - # This is necessary so that we have the tags. fetch-depth: 0 - - name: "Build artifacts" + + - name: "Build package artifacts" run: uv build - - name: Publish to PyPi + + # Logic for TestPyPI (on v3-dev branch push) + - name: "Publish to TestPyPI" + if: ${{ !contains(github.ref, 'refs/tags/v3') }} run: uv publish --index test - - name: Test package install + - name: "Verify TestPyPI package installation" + if: ${{ !contains(github.ref, 'refs/tags/v3') }} run: uv run --index test --with specklepy --no-project -- python -c "import specklepy" + + # Logic for PyPI (on v3* tag creation) + - name: "Publish to PyPI" + if: ${{ contains(github.ref, 'refs/tags/v3') }} + run: uv publish + + - name: "Verify PyPI package installation" + if: ${{ contains(github.ref, 'refs/tags/v3') }} + run: uv run --with specklepy --no-project -- python -c "import specklepy" diff --git a/docker-compose.yml b/docker-compose.yml index ce09d1b..111918e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: POSTGRES_USER: speckle POSTGRES_PASSWORD: speckle volumes: - - ./.volumes/postgres-data:/var/lib/postgresql/data/ + - postgres-data:/var/lib/postgresql/data/ healthcheck: # the -U user has to match the POSTGRES_USER value test: ["CMD-SHELL", "pg_isready -U speckle"] @@ -25,7 +25,7 @@ services: image: "redis:6.0-alpine" restart: always volumes: - - ./.volumes/redis-data:/data + - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 5s @@ -37,7 +37,7 @@ services: command: server /data --console-address ":9001" restart: always volumes: - - ./.volumes/minio-data:/data + - minio-data:/data healthcheck: test: [ @@ -100,7 +100,6 @@ services: POSTGRES_PASSWORD: "speckle" POSTGRES_DB: "speckle" ENABLE_MP: "false" - FRONTEND_ORIGIN: "http://127.0.0.1:8080" networks: default: