diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 2ac552c2537..cc664a69ad6 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.8.8-beta.1 +current_version = 0.8.8-beta.2 tag = False tag_name = {new_version} commit = True diff --git a/.github/workflows/cd-feature-branch.yml b/.github/workflows/cd-feature-branch.yml new file mode 100644 index 00000000000..496307bbca7 --- /dev/null +++ b/.github/workflows/cd-feature-branch.yml @@ -0,0 +1,380 @@ +#TODO: Due to lack of time, this could not be de-duplicated +# from cd-syft.yml, which have a similar structure +name: CD - Feature Branch + +on: + workflow_dispatch: + inputs: + release_version: + description: "Syft Version to Release" + required: true + type: string + + release_branch: + description: "Branch to Release from" + required: true + type: string + + release_id: + description: "A Unique Identifier for the Release, which would be appended as version+release_id, Can contain only [A-Z][a-z][0-9][.]" + required: true + type: string + + release_platform: + description: "Release Platform" + required: true + default: "TEST_PYPI" + type: choice + options: + - TEST_PYPI + # - REAL_PYPI + # - REAL_AND_TEST_PYPI + +# Prevents concurrent runs of the same workflow +# while the previous run is still in progress +concurrency: + group: "CD - Feature Branch" + cancel-in-progress: false + +jobs: + build-and-push-docker-images: + strategy: + matrix: + runner: [sh-arc-linux-x64, sh-arc-linux-arm64] + runs-on: ${{ matrix.runner }} + + outputs: + server_version: ${{ steps.release_metadata.outputs.server_version }} + short_server_version: ${{ steps.release_metadata.outputs.short_server_version }} + + steps: + # actions/setup-python doesn't yet support ARM + - name: Setup Python on x64 + if: ${{ !endsWith(matrix.runner, '-arm64') }} + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + # Currently psutil package requires gcc to be installed on arm + # for building psutil from source + # as linux/aarch64 wheels not avaialble for psutil + # We could remove once we have aarch64 wheels + # https://github.com/giampaolo/psutil/issues/1972 + - name: Install Metadata packages for arm64 + if: ${{ endsWith(matrix.runner, '-arm64') }} + run: | + sudo apt update -y + sudo apt install software-properties-common -y + sudo apt install gcc curl -y + sudo apt-get install python3-dev -y + + - name: Setup Python on arm64 + if: ${{ endsWith(matrix.runner, '-arm64') }} + uses: deadsnakes/action@v3.1.0 + with: + python-version: "3.12" + + - name: Install Git + run: | + sudo apt-get update + sudo apt-get install git -y + + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.release_branch }} + + - name: Check python version + run: | + python --version + python3 --version + which python + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install uv==0.2.17 tox tox-uv==1.9.0 bump2version==1.0.1 + uv --version + + - name: Generate Release Metadata + id: release_metadata + run: | + if [[ ${{matrix.runner}} == *"x64"* ]]; then + echo "release_platform=linux/amd64" >> $GITHUB_OUTPUT + echo "short_release_platform=amd64" >> $GITHUB_OUTPUT + else + echo "release_platform=linux/arm64" >> $GITHUB_OUTPUT + echo "short_release_platform=arm64" >> $GITHUB_OUTPUT + fi + echo "server_version=${{ github.event.inputs.release_version }}+${{ github.event.inputs.release_id }}.$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_OUTPUT + echo "short_server_version=${{ github.event.inputs.release_version }}" >> $GITHUB_OUTPUT + + - name: Bump to Final Release version + run: | + python scripts/bump_version.py --bump-to-stable ${{ steps.release_metadata.outputs.server_version}} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_LOGIN }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push `syft-backend` image to DockerHub + id: syft-backend-build + uses: docker/build-push-action@v6 + with: + context: ./packages + file: ./packages/grid/backend/backend.dockerfile + platforms: ${{ steps.release_metadata.outputs.release_platform }} + target: backend + outputs: type=image,name=openmined/syft-backend,push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=openmined/syft-backend:cache-${{ steps.release_metadata.outputs.short_release_platform }} + cache-to: type=registry,ref=openmined/syft-backend:cache-${{ steps.release_metadata.outputs.short_release_platform }},mode=max + + - name: Export digest for syft-backend + run: | + mkdir -p /tmp/digests/syft-backend + digest="${{ steps.syft-backend-build.outputs.digest }}" + touch "/tmp/digests/syft-backend/${digest#sha256:}" + + - name: Build and push `syft-frontend` image to DockerHub + id: syft-frontend-build + uses: docker/build-push-action@v6 + with: + context: ./packages/grid/frontend + file: ./packages/grid/frontend/frontend.dockerfile + platforms: ${{ steps.release_metadata.outputs.release_platform }} + outputs: type=image,name=openmined/syft-frontend,push-by-digest=true,name-canonical=true,push=true + target: syft-ui-development + cache-from: type=registry,ref=openmined/syft-frontend:cache-${{ steps.release_metadata.outputs.short_release_platform }} + cache-to: type=registry,ref=openmined/syft-frontend:cache-${{ steps.release_metadata.outputs.short_release_platform}},mode=max + + - name: Export digest for syft-frontend + run: | + mkdir -p /tmp/digests/syft-frontend + digest="${{ steps.syft-frontend-build.outputs.digest }}" + touch "/tmp/digests/syft-frontend/${digest#sha256:}" + + - name: Build and push `syft-seaweedfs` image to DockerHub + id: syft-seaweedfs-build + uses: docker/build-push-action@v6 + with: + context: ./packages/grid/seaweedfs + file: ./packages/grid/seaweedfs/seaweedfs.dockerfile + platforms: ${{ steps.release_metadata.outputs.release_platform }} + outputs: type=image,name=openmined/syft-seaweedfs,push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=openmined/syft-seaweedfs:cache-${{ steps.release_metadata.outputs.short_release_platform }} + cache-to: type=registry,ref=openmined/syft-seaweedfs:cache-${{ steps.release_metadata.outputs.short_release_platform}},mode=max + + - name: Export digest for syft-seaweedfs + run: | + mkdir -p /tmp/digests/syft-seaweedfs + digest="${{ steps.syft-seaweedfs-build.outputs.digest }}" + touch "/tmp/digests/syft-seaweedfs/${digest#sha256:}" + + # Some of the dependencies of syft-enclave-attestation are not available for arm64 + # Hence, we are building syft-enclave-attestation only for x64 (see the `if` conditional) + - name: Build and push `syft-enclave-attestation` image to DockerHub + if: ${{ endsWith(matrix.runner, '-x64') }} + id: syft-enclave-attestation-build + uses: docker/build-push-action@v6 + with: + context: ./packages/grid/enclave/attestation + file: ./packages/grid/enclave/attestation/attestation.dockerfile + platforms: ${{ steps.release_metadata.outputs.release_platform }} + outputs: type=image,name=openmined/syft-enclave-attestation,push-by-digest=true,name-canonical=true,push=true + cache-from: type=registry,ref=openmined/syft-enclave-attestation:cache-${{ steps.release_metadata.outputs.short_release_platform }} + cache-to: type=registry,ref=openmined/syft-enclave-attestation:cache-${{ steps.release_metadata.outputs.short_release_platform}},mode=max + + - name: Export digest for syft-enclave-attestation + if: ${{ endsWith(matrix.runner, '-x64') }} + run: | + mkdir -p /tmp/digests/syft-enclave-attestation + digest="${{ steps.syft-enclave-attestation-build.outputs.digest }}" + touch "/tmp/digests/syft-enclave-attestation/${digest#sha256:}" + + - name: Build and push `syft` image to registry + id: syft-build + uses: docker/build-push-action@v6 + with: + context: ./packages/ + file: ./packages/grid/syft-client/syft.Dockerfile + outputs: type=image,name=openmined/syft-client,push-by-digest=true,name-canonical=true,push=true + platforms: ${{ steps.release_metadata.outputs.release_platform }} + cache-from: type=registry,ref=openmined/syft-client:cache-${{ steps.release_metadata.outputs.short_release_platform }} + cache-to: type=registry,ref=openmined/syft-client:cache-${{ steps.release_metadata.outputs.short_release_platform }},mode=max + + - name: Export digest for `syft` image + run: | + mkdir -p /tmp/digests/syft + digest="${{ steps.syft-build.outputs.digest }}" + touch "/tmp/digests/syft/${digest#sha256:}" + + - name: Upload digests + uses: actions/upload-artifact@v4 + with: + name: digests-${{ steps.release_metadata.outputs.server_version }}-${{ steps.release_metadata.outputs.short_release_platform }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + #Used to merge x64 and arm64 into one docker image + merge-docker-images: + needs: [build-and-push-docker-images] + if: always() && (needs.build-and-push-docker-images.result == 'success') + + runs-on: sh-arc-linux-x64 + + outputs: + server_version: ${{ needs.build-and-push-docker-images.outputs.server_version }} + + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-${{ needs.build-and-push-docker-images.outputs.server_version }}-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_LOGIN }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Create manifest list and push for syft-backend + working-directory: /tmp/digests/syft-backend + run: | + docker buildx imagetools create \ + -t openmined/syft-backend:${{ needs.build-and-push-docker-images.outputs.short_server_version }} \ + $(printf 'openmined/syft-backend@sha256:%s ' *) + + - name: Create manifest list and push for syft-frontend + working-directory: /tmp/digests/syft-frontend + run: | + docker buildx imagetools create \ + -t openmined/syft-frontend:${{ needs.build-and-push-docker-images.outputs.short_server_version }} \ + $(printf 'openmined/syft-frontend@sha256:%s ' *) + + - name: Create manifest list and push for syft-seaweedfs + working-directory: /tmp/digests/syft-seaweedfs + run: | + docker buildx imagetools create \ + -t openmined/syft-seaweedfs:${{ needs.build-and-push-docker-images.outputs.short_server_version }} \ + $(printf 'openmined/syft-seaweedfs@sha256:%s ' *) + + - name: Create manifest list and push for syft-enclave-attestation + working-directory: /tmp/digests/syft-enclave-attestation + run: | + docker buildx imagetools create \ + -t openmined/syft-enclave-attestation:${{ needs.build-and-push-docker-images.outputs.short_server_version }} \ + $(printf 'openmined/syft-enclave-attestation@sha256:%s ' *) + + - name: Create manifest list and push for syft client + working-directory: /tmp/digests/syft + run: | + docker buildx imagetools create \ + -t openmined/syft-client:${{ needs.build-and-push-docker-images.outputs.short_server_version }} \ + $(printf 'openmined/syft-client@sha256:%s ' *) + + deploy-syft: + needs: [merge-docker-images] + if: always() && needs.merge-docker-images.result == 'success' + + runs-on: ubuntu-latest + + steps: + - name: Permission to home directory + run: | + sudo chown -R $USER:$USER $HOME + + - uses: actions/checkout@v4 + with: + token: ${{ secrets.SYFT_BOT_COMMIT_TOKEN }} + ref: ${{ github.event.inputs.release_branch }} + + # free 10GB of space + - name: Remove unnecessary files + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + docker image prune --all --force + docker builder prune --all --force + docker system prune --all --force + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install uv==0.2.17 tox tox-uv==1.9.0 setuptools wheel twine bump2version PyYAML + uv --version + + - name: Bump to Final Release version + run: | + python scripts/bump_version.py --bump-to-stable ${{ needs.merge-docker-images.outputs.server_version }} + + - name: Build Helm Chart + shell: bash + run: | + # install k3d + K3D_VERSION=v5.6.3 + wget https://github.com/k3d-io/k3d/releases/download/${K3D_VERSION}/k3d-linux-amd64 + mv k3d-linux-amd64 k3d + chmod +x k3d + export PATH=`pwd`:$PATH + k3d version + + #Install Devspace + DEVSPACE_VERSION=v6.3.12 + curl -sSL https://github.com/loft-sh/devspace/releases/download/${DEVSPACE_VERSION}/devspace-linux-amd64 -o ./devspace + chmod +x devspace + devspace version + + # Install helm + curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash + helm version + + tox -e syft.build.helm + tox -e syft.package.helm + + - name: Linting + run: | + tox -e lint || true + + - name: Manual Build and Publish + run: | + tox -e syft.publish + if [[ "${{ github.event.inputs.release_platform }}" == "TEST_PYPI" ]]; then + twine upload -r testpypi -u __token__ -p ${{ secrets.OM_SYFT_TEST_PYPI_TOKEN }} packages/syft/dist/* + fi + + # Checkout to gh-pages and update helm repo + - name: Checkout to gh-pages + uses: actions/checkout@v4 + with: + ref: gh-pages + token: ${{ secrets.SYFT_BOT_COMMIT_TOKEN }} + path: ghpages + + - name: Copy helm repo files from Syft Repo + run: | + rm -rf ghpages/helm/* + cp -R packages/grid/helm/repo/. ghpages/helm/ + + - name: Commit changes to gh-pages + uses: EndBug/add-and-commit@v9 + with: + author_name: ${{ secrets.OM_BOT_NAME }} + author_email: ${{ secrets.OM_BOT_EMAIL }} + message: "Update Helm package from Syft Repo" + add: "helm/" + push: "origin gh-pages" + cwd: "./ghpages/" diff --git a/.github/workflows/test-sha.yaml b/.github/workflows/test-sha.yaml new file mode 100644 index 00000000000..9e9c644bc88 --- /dev/null +++ b/.github/workflows/test-sha.yaml @@ -0,0 +1,26 @@ +name: Get Actual Head SHA + +on: + workflow_dispatch: + inputs: + branch: + description: "Branch to run the workflow on" + required: true + default: "main" + +jobs: + get-sha: + runs-on: ubuntu-latest + + steps: + - name: Check out the specified branch + uses: actions/checkout@v3 + with: + ref: ${{ github.event.inputs.branch }} + + - name: Get the actual commit SHA + id: get-sha + run: echo "ACTUAL_SHA=$(git rev-parse HEAD)" >> $GITHUB_ENV + + - name: Print the actual commit SHA + run: echo "The actual commit SHA is ${{ env.ACTUAL_SHA }}" diff --git a/VERSION b/VERSION index 8742f2ae357..ab18b3a5a42 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.8.8-beta.1" +__version__ = "0.8.8-beta.2" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/grid/VERSION b/packages/grid/VERSION index 8742f2ae357..ab18b3a5a42 100644 --- a/packages/grid/VERSION +++ b/packages/grid/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.8.8-beta.1" +__version__ = "0.8.8-beta.2" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/grid/backend/grid/images/worker_cpu.dockerfile b/packages/grid/backend/grid/images/worker_cpu.dockerfile index ce0ed514280..e8021670dde 100644 --- a/packages/grid/backend/grid/images/worker_cpu.dockerfile +++ b/packages/grid/backend/grid/images/worker_cpu.dockerfile @@ -5,7 +5,7 @@ # NOTE: This dockerfile will be built inside a syft-backend container in PROD # Hence COPY will not work the same way in DEV vs. PROD -ARG SYFT_VERSION_TAG="0.8.8-beta.1" +ARG SYFT_VERSION_TAG="0.8.8-beta.2" FROM openmined/syft-backend:${SYFT_VERSION_TAG} # should match base image python version diff --git a/packages/grid/devspace.yaml b/packages/grid/devspace.yaml index 07985f06baa..d2a2d975188 100644 --- a/packages/grid/devspace.yaml +++ b/packages/grid/devspace.yaml @@ -28,7 +28,7 @@ vars: DOCKER_IMAGE_RATHOLE: openmined/syft-rathole DOCKER_IMAGE_ENCLAVE_ATTESTATION: openmined/syft-enclave-attestation CONTAINER_REGISTRY: "docker.io" - VERSION: "0.8.8-beta.1" + VERSION: "0.8.8-beta.2" PLATFORM: $(uname -m | grep -q 'arm64' && echo "arm64" || echo "amd64") # This is a list of `images` that DevSpace can build for this project diff --git a/packages/grid/frontend/package.json b/packages/grid/frontend/package.json index 06a5c96b4a7..8ffa52384fc 100644 --- a/packages/grid/frontend/package.json +++ b/packages/grid/frontend/package.json @@ -1,6 +1,6 @@ { "name": "syft-ui", - "version": "0.8.8-beta.1", + "version": "0.8.8-beta.2", "private": true, "scripts": { "dev": "pnpm i && vite dev --host --port 80", diff --git a/packages/grid/helm/repo/index.yaml b/packages/grid/helm/repo/index.yaml index fcedb66dbeb..60025378a47 100644 --- a/packages/grid/helm/repo/index.yaml +++ b/packages/grid/helm/repo/index.yaml @@ -1,9 +1,22 @@ apiVersion: v1 entries: syft: + - apiVersion: v2 + appVersion: 0.8.8-beta.2 + created: "2024-07-23T05:14:36.304021154Z" + description: Perform numpy-like analysis on data that remains in someone elses + server + digest: 1323f4082c65944b522cd8e36dc7285c83c7dfcf6a56f7962665a8b1256a4d09 + home: https://github.com/OpenMined/PySyft/ + icon: https://raw.githubusercontent.com/OpenMined/PySyft/dev/docs/img/title_syft_light.png + name: syft + type: application + urls: + - https://openmined.github.io/PySyft/helm/syft-0.8.8-beta.2.tgz + version: 0.8.8-beta.2 - apiVersion: v2 appVersion: 0.8.8-beta.1 - created: "2024-07-19T14:56:58.347810182Z" + created: "2024-07-23T05:14:36.303032417Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: ec027b50b8182ef656be14ddca9537785c37712a4be8cb940f30ac029b63de2d @@ -16,7 +29,7 @@ entries: version: 0.8.8-beta.1 - apiVersion: v2 appVersion: 0.8.7 - created: "2024-07-19T14:56:58.3470709Z" + created: "2024-07-23T05:14:36.302279109Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 7ea7f63d1c6d0948860547f8aa39343fc5ef399c8e62d9d7edd4473cf44d8186 @@ -29,7 +42,7 @@ entries: version: 0.8.7 - apiVersion: v2 appVersion: 0.8.7-beta.16 - created: "2024-07-19T14:56:58.340216525Z" + created: "2024-07-23T05:14:36.295290269Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 75190eae57b64c2c47ab4a7fe3c6e94f35eb8045807a843ec8d7b26585c9e840 @@ -42,7 +55,7 @@ entries: version: 0.8.7-beta.16 - apiVersion: v2 appVersion: 0.8.7-beta.15 - created: "2024-07-19T14:56:58.339374411Z" + created: "2024-07-23T05:14:36.294389015Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 56879d9a9f10febce88676d3d20621d74d17f9e33f5df6ae1e9bc3078c216f0c @@ -55,7 +68,7 @@ entries: version: 0.8.7-beta.15 - apiVersion: v2 appVersion: 0.8.7-beta.14 - created: "2024-07-19T14:56:58.338523221Z" + created: "2024-07-23T05:14:36.292741363Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6e7cbca1d603ba11e09ae2a3089cfdafaa08cfa07c553c4f0fb8b42f8d3028f7 @@ -68,7 +81,7 @@ entries: version: 0.8.7-beta.14 - apiVersion: v2 appVersion: 0.8.7-beta.13 - created: "2024-07-19T14:56:58.337608702Z" + created: "2024-07-23T05:14:36.291821233Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 1dbe3ecdfec57bf25020cbcff783fab908f0eb0640ad684470b2fd1da1928005 @@ -81,7 +94,7 @@ entries: version: 0.8.7-beta.13 - apiVersion: v2 appVersion: 0.8.7-beta.12 - created: "2024-07-19T14:56:58.335962013Z" + created: "2024-07-23T05:14:36.291098433Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: e92b2f3a522dabb3a79ff762a7042ae16d2bf3a53eebbb2885a69b9f834d109c @@ -94,7 +107,7 @@ entries: version: 0.8.7-beta.12 - apiVersion: v2 appVersion: 0.8.7-beta.11 - created: "2024-07-19T14:56:58.335262055Z" + created: "2024-07-23T05:14:36.290385871Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 099f6cbd44b699ee2410a4be012ed1a8a65bcacb06a43057b2779d7fe34fc0ad @@ -107,7 +120,7 @@ entries: version: 0.8.7-beta.11 - apiVersion: v2 appVersion: 0.8.7-beta.10 - created: "2024-07-19T14:56:58.334556426Z" + created: "2024-07-23T05:14:36.289673661Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 00773cb241522e281c1915339fc362e047650e08958a736e93d6539f44cb5e25 @@ -120,7 +133,7 @@ entries: version: 0.8.7-beta.10 - apiVersion: v2 appVersion: 0.8.7-beta.9 - created: "2024-07-19T14:56:58.346189183Z" + created: "2024-07-23T05:14:36.300571596Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: a3f8e85d9ddef7a644b959fcc2fcb0fc08f7b6abae1045e893d0d62fa4ae132e @@ -133,7 +146,7 @@ entries: version: 0.8.7-beta.9 - apiVersion: v2 appVersion: 0.8.7-beta.8 - created: "2024-07-19T14:56:58.345525713Z" + created: "2024-07-23T05:14:36.299856881Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: a422ac88d8fd1fb80d5004d5eb6e95fa9efc7f6a87da12e5ac04829da7f04c4d @@ -146,7 +159,7 @@ entries: version: 0.8.7-beta.8 - apiVersion: v2 appVersion: 0.8.7-beta.7 - created: "2024-07-19T14:56:58.344835814Z" + created: "2024-07-23T05:14:36.2991927Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0dc313a1092e6256a7c8aad002c8ec380b3add2c289d680db1e238a336399b7a @@ -159,7 +172,7 @@ entries: version: 0.8.7-beta.7 - apiVersion: v2 appVersion: 0.8.7-beta.6 - created: "2024-07-19T14:56:58.343389133Z" + created: "2024-07-23T05:14:36.298549398Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 052a2ec1102d2a4c9915f95647abd4a6012f56fa05a106f4952ee9b55bf7bae8 @@ -172,7 +185,7 @@ entries: version: 0.8.7-beta.6 - apiVersion: v2 appVersion: 0.8.7-beta.5 - created: "2024-07-19T14:56:58.342754858Z" + created: "2024-07-23T05:14:36.297898482Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 1728af756907c3fcbe87c2fd2de014a2d963c22a4c2eb6af6596b525a9b9a18a @@ -185,7 +198,7 @@ entries: version: 0.8.7-beta.5 - apiVersion: v2 appVersion: 0.8.7-beta.4 - created: "2024-07-19T14:56:58.342126354Z" + created: "2024-07-23T05:14:36.29724456Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 387a57a3904a05ed61e92ee48605ef6fd5044ff7e822e0924e0d4c485e2c88d2 @@ -198,7 +211,7 @@ entries: version: 0.8.7-beta.4 - apiVersion: v2 appVersion: 0.8.7-beta.3 - created: "2024-07-19T14:56:58.341496597Z" + created: "2024-07-23T05:14:36.296590688Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 3668002b7a4118516b2ecd61d6275f60d83fc12841587ab8f62e1c1200731c67 @@ -211,7 +224,7 @@ entries: version: 0.8.7-beta.3 - apiVersion: v2 appVersion: 0.8.7-beta.2 - created: "2024-07-19T14:56:58.340854798Z" + created: "2024-07-23T05:14:36.295906961Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: e62217ffcadee2b8896ab0543f9ccc42f2df898fd979438ac9376d780b802af7 @@ -224,7 +237,7 @@ entries: version: 0.8.7-beta.2 - apiVersion: v2 appVersion: 0.8.7-beta.1 - created: "2024-07-19T14:56:58.333860827Z" + created: "2024-07-23T05:14:36.288984162Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 553981fe1d5c980e6903b3ff2f1b9b97431f6dd8aee91e3976bcc5594285235e @@ -237,7 +250,7 @@ entries: version: 0.8.7-beta.1 - apiVersion: v2 appVersion: 0.8.6 - created: "2024-07-19T14:56:58.333318874Z" + created: "2024-07-23T05:14:36.288449223Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: ddbbe6fea1702e57404875eb3019a3b1a341017bdbb5fbc6ce418507e5c15756 @@ -250,7 +263,7 @@ entries: version: 0.8.6 - apiVersion: v2 appVersion: 0.8.6-beta.1 - created: "2024-07-19T14:56:58.332765961Z" + created: "2024-07-23T05:14:36.287851767Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: cc2c81ef6796ac853dce256e6bf8a6af966c21803e6534ea21920af681c62e61 @@ -263,7 +276,7 @@ entries: version: 0.8.6-beta.1 - apiVersion: v2 appVersion: 0.8.5 - created: "2024-07-19T14:56:58.332190095Z" + created: "2024-07-23T05:14:36.287249832Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: db5d90d44006209fd5ecdebd88f5fd56c70f7c76898343719a0ff8da46da948a @@ -276,7 +289,7 @@ entries: version: 0.8.5 - apiVersion: v2 appVersion: 0.8.5-post.2 - created: "2024-07-19T14:56:58.331422871Z" + created: "2024-07-23T05:14:36.286450138Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: ea3f7269b55f773fa165d7008c054b7cf3ec4c62eb40a96f08cd3a9b77fd2165 @@ -289,7 +302,7 @@ entries: version: 0.8.5-post.2 - apiVersion: v2 appVersion: 0.8.5-post.1 - created: "2024-07-19T14:56:58.330873344Z" + created: "2024-07-23T05:14:36.28525945Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 9deb844d3dc2d8480c60f8c631dcc7794adfb39cec3aa3b1ce22ea26fdf87d02 @@ -302,7 +315,7 @@ entries: version: 0.8.5-post.1 - apiVersion: v2 appVersion: 0.8.5-beta.10 - created: "2024-07-19T14:56:58.32280441Z" + created: "2024-07-23T05:14:36.277953038Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 9cfe01e8f57eca462261a24a805b41509be2de9a0fee76e331d124ed98c4bc49 @@ -315,7 +328,7 @@ entries: version: 0.8.5-beta.10 - apiVersion: v2 appVersion: 0.8.5-beta.9 - created: "2024-07-19T14:56:58.330065615Z" + created: "2024-07-23T05:14:36.284257708Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 057f1733f2bc966e15618f62629315c8207773ef6211c79c4feb557dae15c32b @@ -328,7 +341,7 @@ entries: version: 0.8.5-beta.9 - apiVersion: v2 appVersion: 0.8.5-beta.8 - created: "2024-07-19T14:56:58.328428308Z" + created: "2024-07-23T05:14:36.283487649Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 921cbce836c3032ef62b48cc82b5b4fcbe44fb81d473cf4d69a4bf0f806eb298 @@ -341,7 +354,7 @@ entries: version: 0.8.5-beta.8 - apiVersion: v2 appVersion: 0.8.5-beta.7 - created: "2024-07-19T14:56:58.327665092Z" + created: "2024-07-23T05:14:36.282714625Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 75482e955b2b9853a80bd653afb1d56535f78f3bfb7726798522307eb3effbbd @@ -354,7 +367,7 @@ entries: version: 0.8.5-beta.7 - apiVersion: v2 appVersion: 0.8.5-beta.6 - created: "2024-07-19T14:56:58.326895754Z" + created: "2024-07-23T05:14:36.281914209Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6a2dfaf65ca855e1b3d7b966d4ff291e6fcbe761e2fc2a78033211ccd3a75de0 @@ -367,7 +380,7 @@ entries: version: 0.8.5-beta.6 - apiVersion: v2 appVersion: 0.8.5-beta.5 - created: "2024-07-19T14:56:58.32611216Z" + created: "2024-07-23T05:14:36.281139492Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: fead03823bef04d66901d563aa755c68ab277f72b126aaa6f0dce76a6f3bdb6d @@ -380,7 +393,7 @@ entries: version: 0.8.5-beta.5 - apiVersion: v2 appVersion: 0.8.5-beta.4 - created: "2024-07-19T14:56:58.325326592Z" + created: "2024-07-23T05:14:36.280323076Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 93e4539d5726a7fd0d6a3e93d1c17c6a358a923ddc01d102eab22f37377502ab @@ -393,7 +406,7 @@ entries: version: 0.8.5-beta.4 - apiVersion: v2 appVersion: 0.8.5-beta.3 - created: "2024-07-19T14:56:58.324515387Z" + created: "2024-07-23T05:14:36.279538871Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: f91e9390edf3441469048f5da646099af98f8b6d199409d0e2c1e6da3a51f054 @@ -406,7 +419,7 @@ entries: version: 0.8.5-beta.3 - apiVersion: v2 appVersion: 0.8.5-beta.2 - created: "2024-07-19T14:56:58.323742512Z" + created: "2024-07-23T05:14:36.278753464Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 59159c3aa4888038edc3c0135c83402363d7a0639fe62966a1e9d4928a364fa8 @@ -419,7 +432,7 @@ entries: version: 0.8.5-beta.2 - apiVersion: v2 appVersion: 0.8.5-beta.1 - created: "2024-07-19T14:56:58.321207396Z" + created: "2024-07-23T05:14:36.276332471Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 65aeb74c52ed8ba5474af500b4c1188a570ee4cb1f2a2da356b3488d28356ed9 @@ -431,7 +444,7 @@ entries: version: 0.8.5-beta.1 - apiVersion: v2 appVersion: 0.8.4 - created: "2024-07-19T14:56:58.320815093Z" + created: "2024-07-23T05:14:36.275940849Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 08afea8e3a9eef225b7e611f0bc1216c140053ef8e51439b02337faeac621fd0 @@ -443,7 +456,7 @@ entries: version: 0.8.4 - apiVersion: v2 appVersion: 0.8.4-beta.31 - created: "2024-07-19T14:56:58.318335309Z" + created: "2024-07-23T05:14:36.27339937Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: fabf3e2f37e53fa623f5d3d99b00feae06e278e5cd63bce419089946312ab1fc @@ -455,7 +468,7 @@ entries: version: 0.8.4-beta.31 - apiVersion: v2 appVersion: 0.8.4-beta.30 - created: "2024-07-19T14:56:58.317920574Z" + created: "2024-07-23T05:14:36.272967053Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6e8f792709f73ec14eab48a268bdf50a4505b340bd142cddd7c7bfffd94009ad @@ -467,7 +480,7 @@ entries: version: 0.8.4-beta.30 - apiVersion: v2 appVersion: 0.8.4-beta.29 - created: "2024-07-19T14:56:58.317145135Z" + created: "2024-07-23T05:14:36.2721201Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 4c985d6a9b3456769c4013f9e85e7374c0f963d2d27627e61f914f5537de1971 @@ -479,7 +492,7 @@ entries: version: 0.8.4-beta.29 - apiVersion: v2 appVersion: 0.8.4-beta.28 - created: "2024-07-19T14:56:58.316677401Z" + created: "2024-07-23T05:14:36.271647287Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: bd2aa3c92c768c47c502e31a326f341addcb34e64d22cdcbf5cc3f19689d859c @@ -491,7 +504,7 @@ entries: version: 0.8.4-beta.28 - apiVersion: v2 appVersion: 0.8.4-beta.27 - created: "2024-07-19T14:56:58.316246256Z" + created: "2024-07-23T05:14:36.271206944Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: e8ad0869993af39d7adda8cb868dc0b24cfb63b4bb9820dc579939c1007a60ba @@ -503,7 +516,7 @@ entries: version: 0.8.4-beta.27 - apiVersion: v2 appVersion: 0.8.4-beta.26 - created: "2024-07-19T14:56:58.315611849Z" + created: "2024-07-23T05:14:36.270740362Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 30dccf630aa25a86a03c67572fe5411687d8ce6d58def448ea10efdba2b85e3a @@ -515,7 +528,7 @@ entries: version: 0.8.4-beta.26 - apiVersion: v2 appVersion: 0.8.4-beta.25 - created: "2024-07-19T14:56:58.31464389Z" + created: "2024-07-23T05:14:36.26998706Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b6e2043bcf5a0335967d770c7939f5a7832955359a7d871c90b265660ff26e5f @@ -527,7 +540,7 @@ entries: version: 0.8.4-beta.25 - apiVersion: v2 appVersion: 0.8.4-beta.24 - created: "2024-07-19T14:56:58.314227853Z" + created: "2024-07-23T05:14:36.269104681Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b19efa95394d50bb8d76da6ec306de5d3bb9ea55371fafea95a1282a697fa33e @@ -539,7 +552,7 @@ entries: version: 0.8.4-beta.24 - apiVersion: v2 appVersion: 0.8.4-beta.23 - created: "2024-07-19T14:56:58.313802949Z" + created: "2024-07-23T05:14:36.268666643Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 5c5d05c15bff548574896118ce92335ae10c5b78f5307fe9b2618e5a5aa71a5c @@ -551,7 +564,7 @@ entries: version: 0.8.4-beta.23 - apiVersion: v2 appVersion: 0.8.4-beta.22 - created: "2024-07-19T14:56:58.313369619Z" + created: "2024-07-23T05:14:36.268169073Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0160dbce938198132ca9cd2a5cb362816344687291f5b6d7cf6de8f2855e9414 @@ -563,7 +576,7 @@ entries: version: 0.8.4-beta.22 - apiVersion: v2 appVersion: 0.8.4-beta.21 - created: "2024-07-19T14:56:58.312919969Z" + created: "2024-07-23T05:14:36.267738479Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 7dce153d2fcae7513e9c132e139b2721fd975ea3cc43a370e34dbeb2a1b7f683 @@ -575,7 +588,7 @@ entries: version: 0.8.4-beta.21 - apiVersion: v2 appVersion: 0.8.4-beta.20 - created: "2024-07-19T14:56:58.312464337Z" + created: "2024-07-23T05:14:36.26726834Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: c51189a187bbf24135382e25cb00964e0330dfcd3b2f0c884581a6686f05dd28 @@ -587,7 +600,7 @@ entries: version: 0.8.4-beta.20 - apiVersion: v2 appVersion: 0.8.4-beta.19 - created: "2024-07-19T14:56:58.311437449Z" + created: "2024-07-23T05:14:36.266230071Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 8219575dedb42fa2ddbf2768a4e9afbfacbc2dff7e953d77c7b10a41b78dc687 @@ -599,7 +612,7 @@ entries: version: 0.8.4-beta.19 - apiVersion: v2 appVersion: 0.8.4-beta.18 - created: "2024-07-19T14:56:58.311028264Z" + created: "2024-07-23T05:14:36.265819644Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6418cde559cf12f1f7fea5a2b123bba950e50eeb3be002441827d2ab7f9e4ef7 @@ -611,7 +624,7 @@ entries: version: 0.8.4-beta.18 - apiVersion: v2 appVersion: 0.8.4-beta.16 - created: "2024-07-19T14:56:58.310617857Z" + created: "2024-07-23T05:14:36.265404308Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 9c9840a7c9476dbb08e0ac83926330718fe50c89879752dd8f92712b036109c0 @@ -623,7 +636,7 @@ entries: version: 0.8.4-beta.16 - apiVersion: v2 appVersion: 0.8.4-beta.15 - created: "2024-07-19T14:56:58.310207801Z" + created: "2024-07-23T05:14:36.264966971Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0955fd22da028315e30c68132cbfa4bdc82bae622039bcfce0de339707bb82eb @@ -635,7 +648,7 @@ entries: version: 0.8.4-beta.15 - apiVersion: v2 appVersion: 0.8.4-beta.14 - created: "2024-07-19T14:56:58.309788287Z" + created: "2024-07-23T05:14:36.26453282Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 56208571956abe20ed7a5cc1867cab2667ed792c63e53d0e8bb70a9b438b7bf6 @@ -647,7 +660,7 @@ entries: version: 0.8.4-beta.14 - apiVersion: v2 appVersion: 0.8.4-beta.13 - created: "2024-07-19T14:56:58.309401124Z" + created: "2024-07-23T05:14:36.264127202Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: d7222c72412b6ee5833fbb07d2549be179cdfc7ccd89e0ad947d112fce799b83 @@ -659,7 +672,7 @@ entries: version: 0.8.4-beta.13 - apiVersion: v2 appVersion: 0.8.4-beta.12 - created: "2024-07-19T14:56:58.30884261Z" + created: "2024-07-23T05:14:36.263750278Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: af08c723756e397962b2d5190dedfd50797b771c5caf58b93a6f65d8fa24785c @@ -671,7 +684,7 @@ entries: version: 0.8.4-beta.12 - apiVersion: v2 appVersion: 0.8.4-beta.11 - created: "2024-07-19T14:56:58.307847643Z" + created: "2024-07-23T05:14:36.263139727Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: a0235835ba57d185a83dd8a26281fa37b2077c3a37fe3a1c50585005695927e3 @@ -683,7 +696,7 @@ entries: version: 0.8.4-beta.11 - apiVersion: v2 appVersion: 0.8.4-beta.10 - created: "2024-07-19T14:56:58.307492028Z" + created: "2024-07-23T05:14:36.262408881Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 910ddfeba0c5e66651500dd11404afff092adc0f768ed68e0d93b04b83aa4388 @@ -695,7 +708,7 @@ entries: version: 0.8.4-beta.10 - apiVersion: v2 appVersion: 0.8.4-beta.9 - created: "2024-07-19T14:56:58.320372255Z" + created: "2024-07-23T05:14:36.275516185Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: c25ca8a9f072d6a5d02232448deaef5668aca05f24dfffbba3ebe30a4f75bb26 @@ -707,7 +720,7 @@ entries: version: 0.8.4-beta.9 - apiVersion: v2 appVersion: 0.8.4-beta.8 - created: "2024-07-19T14:56:58.320034174Z" + created: "2024-07-23T05:14:36.275172644Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 7249a39d4137e457b369384ba0a365c271c780d93a8327ce25083df763c39999 @@ -719,7 +732,7 @@ entries: version: 0.8.4-beta.8 - apiVersion: v2 appVersion: 0.8.4-beta.7 - created: "2024-07-19T14:56:58.319694469Z" + created: "2024-07-23T05:14:36.274815416Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: ee750c7c8d6ea05bd447375e624fdd7f66dd87680ab81f7b7e73df7379a9024a @@ -731,7 +744,7 @@ entries: version: 0.8.4-beta.7 - apiVersion: v2 appVersion: 0.8.4-beta.6 - created: "2024-07-19T14:56:58.319357309Z" + created: "2024-07-23T05:14:36.274467296Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0e046be9f73df7444a995608c59af16fab9030b139b2acb4d6db6185b8eb5337 @@ -743,7 +756,7 @@ entries: version: 0.8.4-beta.6 - apiVersion: v2 appVersion: 0.8.4-beta.5 - created: "2024-07-19T14:56:58.319019878Z" + created: "2024-07-23T05:14:36.274114096Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b56e9a23d46810eccdb4cf5272cc05126da3f6db314e541959c3efb5f260620b @@ -755,7 +768,7 @@ entries: version: 0.8.4-beta.5 - apiVersion: v2 appVersion: 0.8.4-beta.4 - created: "2024-07-19T14:56:58.318679462Z" + created: "2024-07-23T05:14:36.27375263Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 1d5808ecaf55391f3b27ae6236400066508acbd242e33db24a1ab4bffa77409e @@ -767,7 +780,7 @@ entries: version: 0.8.4-beta.4 - apiVersion: v2 appVersion: 0.8.4-beta.3 - created: "2024-07-19T14:56:58.317502693Z" + created: "2024-07-23T05:14:36.272534705Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b64efa8529d82be56c6ab60487ed24420a5614d96d2509c1f93c1003eda71a54 @@ -779,7 +792,7 @@ entries: version: 0.8.4-beta.3 - apiVersion: v2 appVersion: 0.8.4-beta.2 - created: "2024-07-19T14:56:58.312032441Z" + created: "2024-07-23T05:14:36.266837596Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -795,7 +808,7 @@ entries: version: 0.8.4-beta.2 - apiVersion: v2 appVersion: 0.8.4-beta.1 - created: "2024-07-19T14:56:58.307135381Z" + created: "2024-07-23T05:14:36.261815843Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -811,7 +824,7 @@ entries: version: 0.8.4-beta.1 - apiVersion: v2 appVersion: 0.8.3 - created: "2024-07-19T14:56:58.306577399Z" + created: "2024-07-23T05:14:36.261249415Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -827,7 +840,7 @@ entries: version: 0.8.3 - apiVersion: v2 appVersion: 0.8.3-beta.6 - created: "2024-07-19T14:56:58.305874355Z" + created: "2024-07-23T05:14:36.260575796Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -843,7 +856,7 @@ entries: version: 0.8.3-beta.6 - apiVersion: v2 appVersion: 0.8.3-beta.5 - created: "2024-07-19T14:56:58.305291015Z" + created: "2024-07-23T05:14:36.259943555Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -859,7 +872,7 @@ entries: version: 0.8.3-beta.5 - apiVersion: v2 appVersion: 0.8.3-beta.4 - created: "2024-07-19T14:56:58.304655327Z" + created: "2024-07-23T05:14:36.259354645Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -875,7 +888,7 @@ entries: version: 0.8.3-beta.4 - apiVersion: v2 appVersion: 0.8.3-beta.2 - created: "2024-07-19T14:56:58.303980717Z" + created: "2024-07-23T05:14:36.258677048Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -891,7 +904,7 @@ entries: version: 0.8.3-beta.2 - apiVersion: v2 appVersion: 0.8.3-beta.1 - created: "2024-07-19T14:56:58.303412455Z" + created: "2024-07-23T05:14:36.258101333Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -907,7 +920,7 @@ entries: version: 0.8.3-beta.1 - apiVersion: v2 appVersion: 0.8.2 - created: "2024-07-19T14:56:58.30279948Z" + created: "2024-07-23T05:14:36.257507042Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -923,7 +936,7 @@ entries: version: 0.8.2 - apiVersion: v2 appVersion: 0.8.2-beta.60 - created: "2024-07-19T14:56:58.301649389Z" + created: "2024-07-23T05:14:36.256810982Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -939,7 +952,7 @@ entries: version: 0.8.2-beta.60 - apiVersion: v2 appVersion: 0.8.2-beta.59 - created: "2024-07-19T14:56:58.300629353Z" + created: "2024-07-23T05:14:36.255275147Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -955,7 +968,7 @@ entries: version: 0.8.2-beta.59 - apiVersion: v2 appVersion: 0.8.2-beta.58 - created: "2024-07-19T14:56:58.29998532Z" + created: "2024-07-23T05:14:36.254474501Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -971,7 +984,7 @@ entries: version: 0.8.2-beta.58 - apiVersion: v2 appVersion: 0.8.2-beta.57 - created: "2024-07-19T14:56:58.299342107Z" + created: "2024-07-23T05:14:36.253808607Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -987,7 +1000,7 @@ entries: version: 0.8.2-beta.57 - apiVersion: v2 appVersion: 0.8.2-beta.56 - created: "2024-07-19T14:56:58.298687655Z" + created: "2024-07-23T05:14:36.253146681Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1003,7 +1016,7 @@ entries: version: 0.8.2-beta.56 - apiVersion: v2 appVersion: 0.8.2-beta.52 - created: "2024-07-19T14:56:58.29803773Z" + created: "2024-07-23T05:14:36.252478873Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1019,7 +1032,7 @@ entries: version: 0.8.2-beta.52 - apiVersion: v2 appVersion: 0.8.2-beta.51 - created: "2024-07-19T14:56:58.297386273Z" + created: "2024-07-23T05:14:36.251768576Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1035,7 +1048,7 @@ entries: version: 0.8.2-beta.51 - apiVersion: v2 appVersion: 0.8.2-beta.50 - created: "2024-07-19T14:56:58.296691274Z" + created: "2024-07-23T05:14:36.251108863Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1051,7 +1064,7 @@ entries: version: 0.8.2-beta.50 - apiVersion: v2 appVersion: 0.8.2-beta.49 - created: "2024-07-19T14:56:58.296017024Z" + created: "2024-07-23T05:14:36.250431748Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1067,7 +1080,7 @@ entries: version: 0.8.2-beta.49 - apiVersion: v2 appVersion: 0.8.2-beta.48 - created: "2024-07-19T14:56:58.294571215Z" + created: "2024-07-23T05:14:36.249474555Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1083,7 +1096,7 @@ entries: version: 0.8.2-beta.48 - apiVersion: v2 appVersion: 0.8.2-beta.47 - created: "2024-07-19T14:56:58.29392136Z" + created: "2024-07-23T05:14:36.248151423Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1099,7 +1112,7 @@ entries: version: 0.8.2-beta.47 - apiVersion: v2 appVersion: 0.8.2-beta.46 - created: "2024-07-19T14:56:58.293360222Z" + created: "2024-07-23T05:14:36.247550359Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1115,7 +1128,7 @@ entries: version: 0.8.2-beta.46 - apiVersion: v2 appVersion: 0.8.2-beta.45 - created: "2024-07-19T14:56:58.29272757Z" + created: "2024-07-23T05:14:36.246855862Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1131,7 +1144,7 @@ entries: version: 0.8.2-beta.45 - apiVersion: v2 appVersion: 0.8.2-beta.44 - created: "2024-07-19T14:56:58.292167753Z" + created: "2024-07-23T05:14:36.246257795Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1147,7 +1160,7 @@ entries: version: 0.8.2-beta.44 - apiVersion: v2 appVersion: 0.8.2-beta.43 - created: "2024-07-19T14:56:58.29156656Z" + created: "2024-07-23T05:14:36.245629441Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1163,7 +1176,7 @@ entries: version: 0.8.2-beta.43 - apiVersion: v2 appVersion: 0.8.2-beta.41 - created: "2024-07-19T14:56:58.290892741Z" + created: "2024-07-23T05:14:36.244927429Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1179,7 +1192,7 @@ entries: version: 0.8.2-beta.41 - apiVersion: v2 appVersion: 0.8.2-beta.40 - created: "2024-07-19T14:56:58.290205707Z" + created: "2024-07-23T05:14:36.244155507Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1195,7 +1208,7 @@ entries: version: 0.8.2-beta.40 - apiVersion: v2 appVersion: 0.8.2-beta.39 - created: "2024-07-19T14:56:58.289588094Z" + created: "2024-07-23T05:14:36.243569592Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1211,7 +1224,7 @@ entries: version: 0.8.2-beta.39 - apiVersion: v2 appVersion: 0.8.2-beta.38 - created: "2024-07-19T14:56:58.288217332Z" + created: "2024-07-23T05:14:36.242905802Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1227,7 +1240,7 @@ entries: version: 0.8.2-beta.38 - apiVersion: v2 appVersion: 0.8.2-beta.37 - created: "2024-07-19T14:56:58.28764328Z" + created: "2024-07-23T05:14:36.241651493Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1243,7 +1256,7 @@ entries: version: 0.8.2-beta.37 - apiVersion: v2 appVersion: 0.8.1 - created: "2024-07-19T14:56:58.287047436Z" + created: "2024-07-23T05:14:36.240733468Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -1257,4 +1270,4 @@ entries: urls: - https://openmined.github.io/PySyft/helm/syft-0.8.1.tgz version: 0.8.1 -generated: "2024-07-19T14:56:58.286141493Z" +generated: "2024-07-23T05:14:36.239770338Z" diff --git a/packages/grid/helm/repo/syft-0.8.8-beta.2.tgz b/packages/grid/helm/repo/syft-0.8.8-beta.2.tgz new file mode 100644 index 00000000000..05c860b0f26 Binary files /dev/null and b/packages/grid/helm/repo/syft-0.8.8-beta.2.tgz differ diff --git a/packages/grid/helm/syft/Chart.yaml b/packages/grid/helm/syft/Chart.yaml index 4b8824050fa..75043b1b7d1 100644 --- a/packages/grid/helm/syft/Chart.yaml +++ b/packages/grid/helm/syft/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: syft description: Perform numpy-like analysis on data that remains in someone elses server type: application -version: "0.8.8-beta.1" -appVersion: "0.8.8-beta.1" +version: "0.8.8-beta.2" +appVersion: "0.8.8-beta.2" home: https://github.com/OpenMined/PySyft/ icon: https://raw.githubusercontent.com/OpenMined/PySyft/dev/docs/img/title_syft_light.png diff --git a/packages/grid/helm/syft/values.yaml b/packages/grid/helm/syft/values.yaml index 7d4d8110010..27e50438193 100644 --- a/packages/grid/helm/syft/values.yaml +++ b/packages/grid/helm/syft/values.yaml @@ -1,7 +1,7 @@ global: # Affects only backend, frontend, and seaweedfs containers registry: docker.io - version: 0.8.8-beta.1 + version: 0.8.8-beta.2 # Force default secret values for development. DO NOT SET THIS TO FALSE IN PRODUCTION randomizedSecrets: true diff --git a/packages/syft/setup.cfg b/packages/syft/setup.cfg index a52dd904495..9d579446775 100644 --- a/packages/syft/setup.cfg +++ b/packages/syft/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = syft -version = attr: "0.8.8-beta.1" +version = attr: "0.8.8-beta.2" description = Perform numpy-like analysis on data that remains in someone elses server author = OpenMined author_email = info@openmined.org diff --git a/packages/syft/src/syft/VERSION b/packages/syft/src/syft/VERSION index 8742f2ae357..ab18b3a5a42 100644 --- a/packages/syft/src/syft/VERSION +++ b/packages/syft/src/syft/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.8.8-beta.1" +__version__ = "0.8.8-beta.2" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/syft/src/syft/__init__.py b/packages/syft/src/syft/__init__.py index 230a50330d0..aa5128b7604 100644 --- a/packages/syft/src/syft/__init__.py +++ b/packages/syft/src/syft/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.8.8-beta.1" +__version__ = "0.8.8-beta.2" # stdlib from collections.abc import Callable diff --git a/packages/syft/src/syft/client/client.py b/packages/syft/src/syft/client/client.py index dbeb0d12a49..243a3d5dc9a 100644 --- a/packages/syft/src/syft/client/client.py +++ b/packages/syft/src/syft/client/client.py @@ -830,7 +830,7 @@ def peers(self) -> list[ServerPeer] | SyftError | None: return None @property - def me(self) -> UserView | SyftError | None: + def account(self) -> UserView | SyftError | None: if self.api.has_service("user"): return self.api.services.user.get_current_user() return None @@ -909,7 +909,7 @@ def login( if password == get_default_root_password(): message = ( "You are using a default password. Please change the password " - "using `[your_client].me.set_password([new_password])`." + "using `[your_client].account.set_password([new_password])`." ) prompt_warning_message(message) diff --git a/packages/syft/src/syft/service/dataset/dataset.py b/packages/syft/src/syft/service/dataset/dataset.py index 96413f71ae0..264e1bfb5d2 100644 --- a/packages/syft/src/syft/service/dataset/dataset.py +++ b/packages/syft/src/syft/service/dataset/dataset.py @@ -295,7 +295,7 @@ def data(self) -> Any: warning = SyftError( message="You do not have permission to access private data." ) - display(warning) + display(warning, clear=True) return None diff --git a/packages/syft/src/syft/service/project/project.py b/packages/syft/src/syft/service/project/project.py index 415f46fefb4..6854503ff8a 100644 --- a/packages/syft/src/syft/service/project/project.py +++ b/packages/syft/src/syft/service/project/project.py @@ -1198,8 +1198,8 @@ def __init__(self, *args: Any, **kwargs: Any): self.users = [UserIdentity.from_client(client) for client in self.clients] # Assign logged in user name as project creator - if isinstance(self.clients[0].me, UserView): - self.username = self.clients[0].me.name + if isinstance(self.clients[0].account, UserView): + self.username = self.clients[0].account.name else: self.username = "" diff --git a/packages/syft/tests/syft/action_test.py b/packages/syft/tests/syft/action_test.py index 47868bc1baa..3e963cf6602 100644 --- a/packages/syft/tests/syft/action_test.py +++ b/packages/syft/tests/syft/action_test.py @@ -57,10 +57,10 @@ def test_new_admin_has_action_object_permission( admin = root_client.login(email=email, password=pw) - root_client.api.services.user.update(uid=admin.me.id, role=ServiceRole.ADMIN) + root_client.api.services.user.update(uid=admin.account.id, role=ServiceRole.ADMIN) if delete_original_admin: - res = root_client.api.services.user.delete(root_client.me.id) + res = root_client.api.services.user.delete(root_client.account.id) assert not isinstance(res, SyftError) assert admin.api.services.action.get(obj.id) == obj diff --git a/packages/syft/tests/syft/users/user_code_test.py b/packages/syft/tests/syft/users/user_code_test.py index 796b6a99753..32b70f42d37 100644 --- a/packages/syft/tests/syft/users/user_code_test.py +++ b/packages/syft/tests/syft/users/user_code_test.py @@ -67,10 +67,10 @@ def test_new_admin_can_list_user_code( admin = root_client.login(email=email, password=pw) - root_client.api.services.user.update(uid=admin.me.id, role=ServiceRole.ADMIN) + root_client.api.services.user.update(uid=admin.account.id, role=ServiceRole.ADMIN) if delete_original_admin: - res = root_client.api.services.user.delete(root_client.me.id) + res = root_client.api.services.user.delete(root_client.account.id) assert not isinstance(res, SyftError) user_code_stash = worker.get_service("usercodeservice").stash diff --git a/packages/syft/tests/syft/users/user_test.py b/packages/syft/tests/syft/users/user_test.py index 8799ce39d5e..00d1743fd71 100644 --- a/packages/syft/tests/syft/users/user_test.py +++ b/packages/syft/tests/syft/users/user_test.py @@ -240,21 +240,21 @@ def test_guest_user_update_to_root_email_failed( default_root_email: str = get_default_root_email() for client in [root_client, do_client, guest_client, ds_client]: res = client.api.services.user.update( - uid=client.me.id, email=default_root_email + uid=client.account.id, email=default_root_email ) assert isinstance(res, SyftError) assert res.message == "User already exists" def test_user_view_set_password(worker: Worker, root_client: DatasiteClient) -> None: - root_client.me.set_password("123", confirm=False) - email = root_client.me.email + root_client.account.set_password("123", confirm=False) + email = root_client.account.email # log in again with the wrong password root_client_c = worker.root_client.login(email=email, password="1234") assert isinstance(root_client_c, SyftError) # log in again with the right password root_client_b = worker.root_client.login(email=email, password="123") - assert root_client_b.me == root_client.me + assert root_client_b.account == root_client.account @pytest.mark.parametrize( @@ -264,7 +264,7 @@ def test_user_view_set_password(worker: Worker, root_client: DatasiteClient) -> def test_user_view_set_invalid_email( root_client: DatasiteClient, invalid_email: str ) -> None: - result = root_client.me.set_email(invalid_email) + result = root_client.account.set_email(invalid_email) assert isinstance(result, SyftError) @@ -281,9 +281,9 @@ def test_user_view_set_email_success( valid_email_root: str, valid_email_ds: str, ) -> None: - result = root_client.me.set_email(valid_email_root) + result = root_client.account.set_email(valid_email_root) assert isinstance(result, SyftSuccess) - result2 = ds_client.me.set_email(valid_email_ds) + result2 = ds_client.account.set_email(valid_email_ds) assert isinstance(result2, SyftSuccess) @@ -291,11 +291,11 @@ def test_user_view_set_default_admin_email_failed( ds_client: DatasiteClient, guest_client: DatasiteClient ) -> None: default_root_email = get_default_root_email() - result = ds_client.me.set_email(default_root_email) + result = ds_client.account.set_email(default_root_email) assert isinstance(result, SyftError) assert result.message == "User already exists" - result_2 = guest_client.me.set_email(default_root_email) + result_2 = guest_client.account.set_email(default_root_email) assert isinstance(result_2, SyftError) assert result_2.message == "User already exists" @@ -303,15 +303,15 @@ def test_user_view_set_default_admin_email_failed( def test_user_view_set_duplicated_email( root_client: DatasiteClient, ds_client: DatasiteClient, guest_client: DatasiteClient ) -> None: - result = ds_client.me.set_email(root_client.me.email) - result2 = guest_client.me.set_email(root_client.me.email) + result = ds_client.account.set_email(root_client.account.email) + result2 = guest_client.account.set_email(root_client.account.email) assert isinstance(result, SyftError) assert result.message == "User already exists" assert isinstance(result2, SyftError) assert result2.message == "User already exists" - result3 = guest_client.me.set_email(ds_client.me.email) + result3 = guest_client.account.set_email(ds_client.account.email) assert isinstance(result3, SyftError) assert result3.message == "User already exists" @@ -321,27 +321,27 @@ def test_user_view_update_name_institution_website( ds_client: DatasiteClient, guest_client: DatasiteClient, ) -> None: - result = root_client.me.update( + result = root_client.account.update( name="syft", institution="OpenMined", website="https://syft.org" ) assert isinstance(result, SyftSuccess) - assert root_client.me.name == "syft" - assert root_client.me.institution == "OpenMined" - assert root_client.me.website == "https://syft.org" + assert root_client.account.name == "syft" + assert root_client.account.institution == "OpenMined" + assert root_client.account.website == "https://syft.org" - result2 = ds_client.me.update(name="syft2", institution="OpenMined") + result2 = ds_client.account.update(name="syft2", institution="OpenMined") assert isinstance(result2, SyftSuccess) - assert ds_client.me.name == "syft2" - assert ds_client.me.institution == "OpenMined" + assert ds_client.account.name == "syft2" + assert ds_client.account.institution == "OpenMined" - result3 = guest_client.me.update(name="syft3") + result3 = guest_client.account.update(name="syft3") assert isinstance(result3, SyftSuccess) - assert guest_client.me.name == "syft3" + assert guest_client.account.name == "syft3" def test_user_view_set_role(worker: Worker, guest_client: DatasiteClient) -> None: admin_client = get_mock_client(worker.root_client, ServiceRole.ADMIN) - assert admin_client.me.role == ServiceRole.ADMIN + assert admin_client.account.role == ServiceRole.ADMIN admin_client.register( name="Sheldon Cooper", email="sheldon@caltech.edu", @@ -353,7 +353,7 @@ def test_user_view_set_role(worker: Worker, guest_client: DatasiteClient) -> Non sheldon = admin_client.users[-1] assert ( sheldon.syft_client_verify_key - == admin_client.me.syft_client_verify_key + == admin_client.account.syft_client_verify_key == admin_client.verify_key ) assert sheldon.role == ServiceRole.DATA_SCIENTIST @@ -365,21 +365,21 @@ def test_user_view_set_role(worker: Worker, guest_client: DatasiteClient) -> Non # be able to change his role, even if he is a data owner now ds_client = guest_client.login(email="sheldon@caltech.edu", password="changethis") assert ( - ds_client.me.syft_client_verify_key + ds_client.account.syft_client_verify_key == ds_client.verify_key != admin_client.verify_key ) - assert ds_client.me.role == sheldon.role - assert ds_client.me.role == ServiceRole.DATA_OWNER - assert isinstance(ds_client.me.update(role="guest"), SyftError) - assert isinstance(ds_client.me.update(role="data_scientist"), SyftError) + assert ds_client.account.role == sheldon.role + assert ds_client.account.role == ServiceRole.DATA_OWNER + assert isinstance(ds_client.account.update(role="guest"), SyftError) + assert isinstance(ds_client.account.update(role="data_scientist"), SyftError) # now we set sheldon's role to admin. Only now he can change his role sheldon.update(role="admin") assert sheldon.role == ServiceRole.ADMIN # QA: this is different than when running in the notebook assert len(ds_client.users.get_all()) == len(admin_client.users.get_all()) - assert isinstance(ds_client.me.update(role="guest"), SyftSuccess) - assert isinstance(ds_client.me.update(role="admin"), SyftError) + assert isinstance(ds_client.account.update(role="guest"), SyftSuccess) + assert isinstance(ds_client.account.update(role="admin"), SyftError) def test_user_view_set_role_admin(faker: Faker) -> None: @@ -405,12 +405,12 @@ def test_user_view_set_role_admin(faker: Faker) -> None: datasite_client.users[1].update(role="admin") ds_client = server.login(email="sheldon@caltech.edu", password="changethis") - assert ds_client.me.role == ServiceRole.ADMIN + assert ds_client.account.role == ServiceRole.ADMIN assert len(ds_client.users.get_all()) == len(datasite_client.users.get_all()) datasite_client.users[2].update(role="admin") ds_client_2 = server.login(email="sheldon2@caltech.edu", password="changethis") - assert ds_client_2.me.role == ServiceRole.ADMIN + assert ds_client_2.account.role == ServiceRole.ADMIN assert len(ds_client_2.users.get_all()) == len(datasite_client.users.get_all()) server.python_server.cleanup() diff --git a/packages/syftcli/manifest.yml b/packages/syftcli/manifest.yml index 56f0eedc87d..cda53aa0678 100644 --- a/packages/syftcli/manifest.yml +++ b/packages/syftcli/manifest.yml @@ -1,11 +1,11 @@ manifestVersion: 1.0 -syftVersion: 0.8.8-beta.1 -dockerTag: 0.8.8-beta.1 +syftVersion: 0.8.8-beta.2 +dockerTag: 0.8.8-beta.2 images: - - docker.io/openmined/syft-frontend:0.8.8-beta.1 - - docker.io/openmined/syft-backend:0.8.8-beta.1 + - docker.io/openmined/syft-frontend:0.8.8-beta.2 + - docker.io/openmined/syft-backend:0.8.8-beta.2 - docker.io/library/mongo:7.0.4 - docker.io/traefik:v2.11.0