diff --git a/.circleci/README.md b/.circleci/README.md deleted file mode 100644 index 862468906..000000000 --- a/.circleci/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Publishing and Releasing - -## Publishing Images - -Images are published based on the logic in [should_publish.sh](./should_publish.sh), and the regex provided in `PUBLISHABLE_TAGS` and `PUBLISHABLE_BRANCHES` environment variables in the CircleCI [config](./config.yml). - -Currently images are published in the following conditions: - -- any commit to branches named `main`, `hotfix.*`, or `alpha.*` -- any branch tagged with [semver](https://semver.org/) `major.minor.patch` (regex: `^[0-9]+\.[0-9]+\.[0-9]+$`) - -## Creating a release - -The easiest way to create a new release is to [Create a New Release](https://github.com/specklesystems/speckle-server/releases/new) on Github, and in the 'Select A Tag' dropdown create a new tag with the appropriate [semver](https://semver.org/) increment. - -Ideally the target branch should be `main`. diff --git a/.circleci/build.sh b/.circleci/build.sh deleted file mode 100755 index 1558c9bf5..000000000 --- a/.circleci/build.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -set -eo pipefail - -# enables building the test-deployment container with the same script -# defaults to packages for minimal intervention in the ci config -FOLDER="${FOLDER:-packages}" - -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -# shellcheck disable=SC1090,SC1091 -source "${SCRIPT_DIR}/common.sh" - -echo "Building image: ${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" - -export DOCKER_BUILDKIT=1 - -docker build --build-arg SPECKLE_SERVER_VERSION="${IMAGE_VERSION_TAG}" --tag "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" --file "${FOLDER}/${SPECKLE_SERVER_PACKAGE}/Dockerfile" . - -echo "🐳 Logging into Docker" -echo "${DOCKER_REG_PASS}" | docker login -u "${DOCKER_REG_USER}" --password-stdin "${DOCKER_REG_URL}" - -echo "⏫ Pushing image: '${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}'" -docker push "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" diff --git a/.circleci/build_publish_fe2_sourcemaps.sh b/.circleci/build_publish_fe2_sourcemaps.sh deleted file mode 100755 index fa7e37693..000000000 --- a/.circleci/build_publish_fe2_sourcemaps.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -GIT_ROOT="$(git rev-parse --show-toplevel)" -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# shellcheck disable=SC1090,SC1091 -source "${SCRIPT_DIR}/common.sh" - -FE2_DIR_PATH="${FE2_DIR_PATH:-"packages/frontend-2"}" -FE2_DATADOG_SERVICE="${FE2_DATADOG_SERVICE:-"web-app-2"}" -DATADOG_SITE="${DATADOG_SITE:-"datadoghq.eu"}" - -if [[ -z "${DATADOG_API_KEY}" ]]; then - echo "DATADOG_API_KEY is not set" - exit 1 -fi - -# Build same prod docker image just w/ sourcemaps enabled -export DOCKER_BUILDKIT=1 -docker build --build-arg BUILD_SOURCEMAPS=true --build-arg SPECKLE_SERVER_VERSION="${IMAGE_VERSION_TAG}" --tag "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}-sourcemaps" --file "${FE2_DIR_PATH}/Dockerfile" . -container_id=$(docker create "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}-sourcemaps") - -# Clean target location and copy sourcemaps into it -rm -rf "${GIT_ROOT}/${FE2_DIR_PATH}/.output" -docker cp "$container_id":/speckle-server "${GIT_ROOT}/${FE2_DIR_PATH}/.output" -docker rm "$container_id" - -# Publish sourcemaps -pushd "${GIT_ROOT}/${FE2_DIR_PATH}" -DATADOG_SITE="${DATADOG_SITE}" npx --yes @datadog/datadog-ci sourcemaps upload ./.output/public/_nuxt \ ---service="${FE2_DATADOG_SERVICE}" \ ---release-version="${IMAGE_VERSION_TAG}" \ ---minified-path-prefix=/_nuxt -popd - -# Clean up -rm -rf "${GIT_ROOT}/${FE2_DIR_PATH}/.output" diff --git a/.circleci/check_version.py b/.circleci/check_version.py deleted file mode 100755 index 517f5d727..000000000 --- a/.circleci/check_version.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/python3 -import sys -from typing import Optional -from dataclasses import dataclass - - -@dataclass -class Version: - major: int - minor: int - patch: int - pre_release_tag: Optional[str] = None - build_number: Optional[int] = None - - @property - def pre_release_priority(self) -> int: - if self.pre_release_tag == "alpha": - return 1 - if self.pre_release_tag == "beta": - return 2 - return 10 - - @staticmethod - def parse_version_slug(version_slug: str) -> "Version": - members = version_slug.split(".") - assert 3 <= len(members) <= 4 - if len(members) == 3: - major, minor, patch = members - return Version(int(major), int(minor), int(patch)) - - else: - major, minor, patch_and_pre, build = members - patch, pre = patch_and_pre.split("-") - return Version(int(major), int(minor), int(patch), pre, int(build)) - - def __gt__(self, other): - if not isinstance(other, Version): - raise ValueError(f"cannot compare with {other}") - - if self.major > other.major: - return True - if self.major < other.major: - return False - - if self.minor > other.minor: - return True - if self.minor < other.minor: - return False - - if self.patch > other.patch: - return True - if self.patch < other.patch: - return False - - if self.pre_release_tag == other.pre_release_tag: - if self.build_number > other.build_number: - return True - if self.build_number < other.build_number: - return False - - if self.pre_release_priority > other.pre_release_priority: - return True - if self.pre_release_priority < other.pre_release_priority: - return False - - return True - - -if __name__ == "__main__": - print("\nStarting version compare\n") - args = sys.argv[1:] - assert len(args) == 2 - - current_version_slug, target_version_slug = args - - print( - f"comparing current version {current_version_slug} with target {target_version_slug}" - ) - - current_version = Version.parse_version_slug(current_version_slug) - target_version = Version.parse_version_slug(target_version_slug) - - if target_version > current_version: - print("target version is newer\n") - exit(0) - - print("current version is newer\n") - exit(1) diff --git a/.circleci/common.sh b/.circleci/common.sh deleted file mode 100755 index 9d7b119a9..000000000 --- a/.circleci/common.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -# shellcheck disable=SC2034 -DOCKER_IMAGE_TAG="speckle/speckle-${SPECKLE_SERVER_PACKAGE}" -IMAGE_VERSION_TAG="${IMAGE_VERSION_TAG:-${CIRCLE_SHA1}}" -# shellcheck disable=SC2068,SC2046 -LAST_RELEASE="$(git describe --always --tags $(git rev-list --tags) | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)" # get the last release tag. FIXME: Fails if a commit is tagged with more than one tag: https://stackoverflow.com/questions/8089002/git-describe-with-two-tags-on-the-same-commit/56039163#56039163 -# shellcheck disable=SC2034 -NEXT_RELEASE="$(echo "${LAST_RELEASE}" | awk -F. -v OFS=. '{$NF += 1 ; print}')" -# shellcheck disable=SC2034 -BRANCH_NAME_TRUNCATED="$(echo "${CIRCLE_BRANCH}" | cut -c -28 | sed 's/[^a-zA-Z0-9.-]/-/g')" # Kubernetes has a 63 character limit, so ensuring the branch name will be short enough. -# shellcheck disable=SC2034 -COMMIT_SHA1_TRUNCATED="$(echo "${CIRCLE_SHA1}" | cut -c -7)" diff --git a/.circleci/config.yml b/.circleci/config.yml index 47eed7ce6..ade0df78b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,41 +2,18 @@ version: 2.1 orbs: snyk: snyk/snyk@2.0.3 - codecov: codecov/codecov@5.0.3 aliases: - - &docker-base-image - docker: - - image: cimg/base:2024.02 - - &docker-node-image docker: - image: cimg/node:22.6.0 - - &docker-node-image-w-browsers - docker: - - image: cimg/node:22.6.0-browsers - - &yarn run: name: Install Dependencies command: YARN_ENABLE_HARDENED_MODE=0 PUPPETEER_SKIP_DOWNLOAD=true PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 yarn - - &filters-allow-all - tags: - # run tests for any commit on any branch, including any tags - only: /.*/ - - - &ignored - branches: - ignore: /.*/ - tags: - ignore: /.*/ - - - &branches-special - - main - - /^hotfix.*$/ - - /^testing\d*$/ + - &work-dir /tmp/ci workflows: test-build: @@ -50,748 +27,7 @@ workflows: - main - hotfix* - - get-version: - filters: *filters-allow-all - - - docker-build-postgres-container: - context: &build-context - - github-readonly-public-repos - - docker-hub - filters: *filters-allow-all - requires: - - get-version - - - test-server-multiregion: - context: - - speckle-server-licensing - - stripe-integration - - speckle-server-codecov - filters: *filters-allow-all - requires: - - docker-build-postgres-container - - - test-server: - context: - - speckle-server-licensing - - stripe-integration - - speckle-server-codecov - filters: *ignored - requires: - - docker-build-postgres-container - - - test-server-no-ff: - filters: *ignored - requires: - - docker-build-postgres-container - - - test-frontend-2: - filters: *ignored - - - test-viewer: - filters: *ignored - - - test-objectsender: - filters: *ignored - - - test-shared: - filters: *ignored - - - test-preview-service: - filters: *ignored - - - test-ui-components: - filters: *ignored - - - ui-components-chromatic: - context: - - chromatic-ui-components - filters: *ignored - - - deployment-testing-approval: - type: approval - filters: *ignored - - #FIXME uncomment when nix https://search.nixos.org/packages?channel=24.05&show=tilt&from=0&size=50&sort=relevance&type=packages&query=tilt supports tilt >v0.33.12 which includes docker compose up --wait flag - # - deployment-test-docker-compose: - # filters: &filters-deployment-testing - # tags: - # # run tests for any commit on any branch, including any tags - # only: /.*/ - # requires: - # - get-version - # - deployment-testing-approval - # - docker-build-server - # - docker-build-frontend - # - docker-build-frontend-2 - # - docker-build-previews - # - docker-build-webhooks - # - docker-build-file-imports - # - docker-build-test-container - # - docker-build-monitor-container - # - docker-build-docker-compose-ingress - - - deployment-test-helm-chart: - filters: *ignored - requires: - - get-version - - deployment-testing-approval - - docker-build-server - - docker-build-frontend-2 - - docker-build-previews - - docker-build-webhooks - - docker-build-file-imports - - docker-build-test-container - - docker-build-monitor-container - - - pre-commit: - filters: *ignored - - - lint-and-prettier: - filters: *ignored - - - docker-build-server: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-frontend-2: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-webhooks: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-file-imports: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-previews: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-test-container: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-monitor-container: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-build-docker-compose-ingress: - context: *build-context - filters: *ignored - requires: - - get-version - - - docker-publish-server: - context: &docker-hub-context - - docker-hub - filters: *ignored - requires: - - docker-build-server - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-frontend-2: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-frontend-2 - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-frontend-2-sourcemaps: - context: - - github-readonly-public-repos - - datadog-sourcemaps-publish - filters: *ignored - requires: - - get-version - - - docker-publish-webhooks: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-webhooks - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-file-imports: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-file-imports - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-previews: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-previews - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-test-container: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-test-container - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-postgres-container: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-monitor-container - - get-version - - pre-commit - - test-server - - test-server-no-ff - - test-server-multiregion - - - docker-publish-monitor-container: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-monitor-container - - get-version - - pre-commit - - lint-and-prettier - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - docker-publish-docker-compose-ingress: - context: *docker-hub-context - filters: *ignored - requires: - - docker-build-docker-compose-ingress - - get-version - - pre-commit - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - - publish-helm-chart: - filters: *ignored - requires: - # - deployment-test-docker-compose #FIXME uncomment when nix https://search.nixos.org/packages?channel=24.05&show=tilt&from=0&size=50&sort=relevance&type=packages&query=tilt supports tilt >v0.33.12 which includes docker compose up --wait flag - - deployment-test-helm-chart - - docker-publish-docker-compose-ingress - - docker-publish-file-imports - - docker-publish-frontend-2 - - docker-publish-monitor-container - - docker-publish-previews - - docker-publish-server - - docker-publish-test-container - - docker-publish-webhooks - - get-version - - - publish-helm-chart-oci: - filters: *ignored - context: - - docker-hub - requires: - # - deployment-test-docker-compose #FIXME uncomment when nix https://search.nixos.org/packages?channel=24.05&show=tilt&from=0&size=50&sort=relevance&type=packages&query=tilt supports tilt >v0.33.12 which includes docker compose up --wait flag - - deployment-test-helm-chart - - docker-publish-docker-compose-ingress - - docker-publish-file-imports - - docker-publish-frontend-2 - - docker-publish-monitor-container - - docker-publish-previews - - docker-publish-server - - docker-publish-test-container - - docker-publish-webhooks - - get-version - - - publish-npm: - filters: *ignored - context: - - npm-registry - requires: - - get-version - - test-server - - test-server-no-ff - - test-server-multiregion - - test-ui-components - - test-frontend-2 - - test-viewer - - test-objectsender - - test-shared - - test-preview-service - - - publish-viewer-sandbox-cloudflare-pages: - filters: *ignored - context: - - cloudflare-pages-edit - requires: - - test-viewer - jobs: - get-version: - <<: *docker-base-image - working_directory: &work-dir /tmp/ci - steps: - - checkout - - run: mkdir -p workspace - - run: - name: set version - command: | - echo "export IMAGE_VERSION_TAG=$(.circleci/get_version.sh)" >> workspace/env-vars - - run: cat workspace/env-vars >> $BASH_ENV - - run: echo "IMAGE_VERSION_TAG=${IMAGE_VERSION_TAG}" - - persist_to_workspace: - root: workspace - paths: - - env-vars - - lint-and-prettier: - <<: *docker-node-image - resource_class: xlarge - working_directory: *work-dir - steps: - - checkout - - run: - name: Install Hardened Dependencies - command: YARN_ENABLE_HARDENED_MODE=1 PUPPETEER_SKIP_DOWNLOAD=true PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Lint everything - command: yarn eslint:projectwide - - run: - name: Run prettier check - command: yarn prettier:check - - run: - name: Check JSON Schema is up to date - command: | - yarn helm:jsonschema:generate - git diff --exit-code - - pre-commit: - parameters: - config_file: - default: ./.pre-commit-config.yaml - description: Optional, path to pre-commit config file. - type: string - docker: - - image: speckle/pre-commit-runner:latest - resource_class: large - working_directory: *work-dir - steps: - - checkout - - restore_cache: - name: Restore pre-commit & Yarn Package cache - keys: - - cache-pre-commit--{{ checksum "<>" }} - - run: - name: Install pre-commit hooks - command: pre-commit install-hooks --config <> - - save_cache: - key: cache-pre-commit--{{ checksum "<>" }} - paths: - - ~/.cache/pre-commit - - run: - name: Run pre-commit - command: pre-commit run --all-files --config <> - - run: - command: git --no-pager diff - name: git diff - when: on_fail - - test-server: &test-server-job - docker: - - image: cimg/node:22.6.0 - - image: cimg/redis:7.2.4 - - image: 'speckle/speckle-postgres' - environment: - POSTGRES_DB: speckle2_test - POSTGRES_PASSWORD: speckle - POSTGRES_USER: speckle - command: -c 'max_connections=1000' - - image: 'minio/minio' - command: server /data --console-address ":9001" - # environment: - - resource_class: large - environment: - NODE_ENV: test - DATABASE_URL: 'postgres://speckle:speckle@127.0.0.1:5432/speckle2_test' - PGDATABASE: speckle2_test - POSTGRES_MAX_CONNECTIONS_SERVER: 20 - PGUSER: speckle - SESSION_SECRET: 'keyboard cat' - STRATEGY_LOCAL: 'true' - CANONICAL_URL: 'http://127.0.0.1:3000' - S3_ENDPOINT: 'http://127.0.0.1:9000' - S3_ACCESS_KEY: 'minioadmin' - S3_SECRET_KEY: 'minioadmin' - S3_BUCKET: 'speckle-server' - S3_CREATE_BUCKET: 'true' - REDIS_URL: 'redis://127.0.0.1:6379' - S3_REGION: '' # optional, defaults to 'us-east-1' - FRONTEND_ORIGIN: 'http://127.0.0.1:8081' - ENCRYPTION_KEYS_PATH: 'test/assets/automate/encryptionKeys.json' - ENABLE_ALL_FFS: 'true' - RATELIMITER_ENABLED: 'false' - steps: - - checkout - - *yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Wait for dependencies to start - command: 'dockerize -wait tcp://localhost:5432 -wait tcp://localhost:6379 -timeout 1m' - - run: - command: cp .env.test-example .env.test - working_directory: 'packages/server' - - run: - name: 'Run tests' - # Extra formatting to get timestamps on each line in CI (for profiling purposes) - command: | - GREP_FLAG="" - - if [ "$RUN_TESTS_IN_MULTIREGION_MODE" == "true" ]; then - GREP_FLAG="--grep @multiregion" - fi - - yarn test:report $GREP_FLAG --color=always | while IFS= read -r line; do echo -e "$(date +%T.%3N) > $line"; done - working_directory: 'packages/server' - no_output_timeout: 30m - - codecov/upload: - files: packages/server/coverage/lcov.info - - store_test_results: - path: packages/server/reports - - # - store_artifacts: - # path: packages/server/coverage/lcov-report - # destination: package/server/coverage - - test-server-no-ff: - <<: *test-server-job - environment: - NODE_ENV: test - DATABASE_URL: 'postgres://speckle:speckle@127.0.0.1:5432/speckle2_test' - PGDATABASE: speckle2_test - POSTGRES_MAX_CONNECTIONS_SERVER: 20 - PGUSER: speckle - SESSION_SECRET: 'keyboard cat' - STRATEGY_LOCAL: 'true' - CANONICAL_URL: 'http://127.0.0.1:3000' - S3_ENDPOINT: 'http://127.0.0.1:9000' - S3_ACCESS_KEY: 'minioadmin' - S3_SECRET_KEY: 'minioadmin' - S3_BUCKET: 'speckle-server' - S3_CREATE_BUCKET: 'true' - REDIS_URL: 'redis://127.0.0.1:6379' - S3_REGION: '' # optional, defaults to 'us-east-1' - FRONTEND_ORIGIN: 'http://127.0.0.1:8081' - ENCRYPTION_KEYS_PATH: 'test/assets/automate/encryptionKeys.json' - DISABLE_ALL_FFS: 'true' - RATELIMITER_ENABLED: 'false' - - test-server-multiregion: - <<: *test-server-job - docker: - - image: cimg/node:22.6.0 - - image: cimg/redis:7.2.4 - - image: 'speckle/speckle-postgres' - environment: - POSTGRES_DB: speckle2_test - POSTGRES_PASSWORD: speckle - POSTGRES_USER: speckle - command: -c 'max_connections=1000' -c 'wal_level=logical' - - image: 'speckle/speckle-postgres' - environment: - POSTGRES_DB: speckle2_test - POSTGRES_PASSWORD: speckle - POSTGRES_USER: speckle - command: -c 'max_connections=1000' -c 'port=5433' -c 'wal_level=logical' - - image: 'speckle/speckle-postgres' - environment: - POSTGRES_DB: speckle2_test - POSTGRES_PASSWORD: speckle - POSTGRES_USER: speckle - command: -c 'max_connections=1000' -c 'port=5434' -c 'wal_level=logical' - - image: 'minio/minio' - command: server /data --console-address ":9001" --address "0.0.0.0:9000" - - image: 'minio/minio' - command: server /data --console-address ":9021" --address "0.0.0.0:9020" - - image: 'minio/minio' - command: server /data --console-address ":9041" --address "0.0.0.0:9040" - environment: - # Same as test-server: - NODE_ENV: test - DATABASE_URL: 'postgres://speckle:speckle@127.0.0.1:5432/speckle2_test' - PGDATABASE: speckle2_test - POSTGRES_MAX_CONNECTIONS_SERVER: 50 - PGUSER: speckle - SESSION_SECRET: 'keyboard cat' - STRATEGY_LOCAL: 'true' - CANONICAL_URL: 'http://127.0.0.1:3000' - S3_ENDPOINT: 'http://127.0.0.1:9000' - S3_ACCESS_KEY: 'minioadmin' - S3_SECRET_KEY: 'minioadmin' - S3_BUCKET: 'speckle-server' - S3_CREATE_BUCKET: 'true' - REDIS_URL: 'redis://127.0.0.1:6379' - S3_REGION: '' # optional, defaults to 'us-east-1' - FRONTEND_ORIGIN: 'http://127.0.0.1:8081' - ENCRYPTION_KEYS_PATH: 'test/assets/automate/encryptionKeys.json' - FF_BILLING_INTEGRATION_ENABLED: 'true' - # These are the only different env keys: - MULTI_REGION_CONFIG_PATH: '../../.circleci/multiregion.test-ci.json' - FF_GATEKEEPER_MODULE_ENABLED: 'true' - FF_WORKSPACES_MODULE_ENABLED: 'true' - FF_WORKSPACES_MULTI_REGION_ENABLED: 'true' - FF_MOVE_PROJECT_REGION_ENABLED: 'true' - RUN_TESTS_IN_MULTIREGION_MODE: true - RATELIMITER_ENABLED: 'false' - - test-frontend-2: - <<: *docker-node-image-w-browsers - resource_class: xlarge - steps: - - checkout - - *yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Lint everything - command: yarn lint:ci - working_directory: 'packages/frontend-2' - - test-viewer: - <<: *docker-node-image-w-browsers - resource_class: large - steps: - - checkout - - *yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Lint viewer - command: yarn lint:ci - working_directory: 'packages/viewer' - - run: - name: Run tests - command: yarn test - working_directory: 'packages/viewer' - - run: - name: Lint viewer-sandbox - command: yarn lint:ci - working_directory: 'packages/viewer-sandbox' - - run: - name: Build viewer-sandbox - command: yarn build - working_directory: 'packages/viewer-sandbox' - - test-preview-service: - docker: - - image: cimg/node:22.6.0-browsers - - image: cimg/postgres:16.4@sha256:2e4f1a965bdd9ba77aa6a0a7b93968c07576ba2a8a7cf86d5eb7b31483db1378 - environment: - POSTGRES_DB: preview_service_test - POSTGRES_PASSWORD: preview_service_test - POSTGRES_USER: preview_service_test - resource_class: large - environment: {} - steps: - - checkout - - *yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Lint everything - command: yarn lint:ci - working_directory: 'packages/preview-service' - - run: - name: Copy .env.example to .env - command: | - #!/usr/bin/env bash - cp packages/preview-service/.env.example packages/preview-service/.env - sed -i~ '/^PG_CONNECTION_STRING=/s/=.*/="postgres:\/\/preview_service_test:preview_service_test@127.0.0.1:5432\/preview_service_test"/' packages/preview-service/.env - - run: - name: Run tests - command: yarn test - working_directory: 'packages/preview-service' - - test-shared: - <<: *docker-node-image-w-browsers - resource_class: medium+ - steps: - - checkout - - *yarn - - run: - name: Lint - command: yarn lint:ci - working_directory: 'packages/shared' - - run: - name: Run tests (all FFs) - command: ENABLE_ALL_FFS=1 yarn test:ci - working_directory: 'packages/shared' - - run: - name: Run tests (no FFs) - command: DISABLE_ALL_FFS=1 yarn test:ci - working_directory: 'packages/shared' - - codecov/upload: - files: packages/shared/coverage/coverage-final.json - - run: - name: Build - command: yarn build - working_directory: 'packages/shared' - - run: - name: Ensure ESM import works - command: node ./e2e/testEsm.mjs - working_directory: 'packages/shared' - - run: - name: Ensure CJS require works - command: node ./e2e/testCjs.cjs - working_directory: 'packages/shared' - - test-objectsender: - <<: *docker-node-image-w-browsers - resource_class: large - steps: - - checkout - - *yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Run tests - command: yarn test:ci - working_directory: 'packages/objectsender' - - store_artifacts: - path: 'packages/objectsender/coverage' - - test-ui-components: - <<: *docker-node-image-w-browsers - resource_class: xlarge - steps: - - checkout - - run: - name: Install Dependencies - command: YARN_ENABLE_HARDENED_MODE=0 PUPPETEER_SKIP_DOWNLOAD=true yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Lint tailwind theme - command: yarn lint:ci - working_directory: 'packages/tailwind-theme' - - run: - name: Lint ui components - command: yarn lint:ci - working_directory: 'packages/ui-components' - - run: - name: Lint component nuxt package - command: yarn lint:ci - working_directory: 'packages/ui-components-nuxt' - - run: - name: Test via Storybook - command: yarn storybook:test:ci - working_directory: 'packages/ui-components' - - ui-components-chromatic: - <<: *docker-node-image - resource_class: medium+ - steps: - - checkout - - *yarn - - run: - name: Build shared packages - command: yarn build:public - - run: - name: Run chromatic - command: yarn chromatic - working_directory: 'packages/ui-components' - vulnerability-scan: # snyk can undertake most types of scans through GitHub integration # which does not require integration with the CI @@ -807,340 +43,3 @@ jobs: - snyk/scan: additional-arguments: --yarn-workspaces --strict-out-of-sync=false fail-on-issues: false - - deployment-test-docker-compose: - machine: - image: ubuntu-2204:2024.05.1 - docker_layer_caching: true - resource_class: large - working_directory: *work-dir - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - # create the nix folder with permissive write permissions - - run: | - sudo mkdir /nix - sudo chmod 777 /nix - - restore_cache: - name: Restore nix cache - keys: - - nix-{{ checksum "./tests/deployment/docker-compose/docker-compose-shell.nix" }} - - run: - name: Install the nix package manager - command: | - sh <(curl -L https://nixos.org/nix/install) --daemon --yes - echo "source /etc/bashrc" >> "${BASH_ENV}" - - run: - name: Initialize nix shell - command: | - nix-shell --run "echo Here, a nix shell for you" ./tests/deployment/docker-compose/docker-compose-shell.nix - - save_cache: - key: nix-{{ checksum "./tests/deployment/docker-compose/docker-compose-shell.nix" }} - paths: - - /nix - - run: cat workspace/env-vars >> $BASH_ENV - - run: nix-shell --run "LOAD_DOCKER='true' tilt ci --file ./tests/deployment/docker-compose/Tiltfile" ./tests/deployment/helm/docker-compose-shell.nix - - deployment-test-helm-chart: - machine: - image: ubuntu-2204:2024.01.1 - docker_layer_caching: true - resource_class: large - working_directory: *work-dir - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - # create the nix folder with permissive write permissions - - run: | - sudo mkdir /nix - sudo chmod 777 /nix - - restore_cache: - name: Restore nix cache - keys: - - nix-{{ checksum "./tests/deployment/helm/helm-chart-shell.nix" }} - - run: - name: Install the nix package manager - command: | - sh <(curl -L https://nixos.org/nix/install) --daemon --yes - echo "source /etc/bashrc" >> "${BASH_ENV}" - - run: - name: Initialize nix shell - command: | - nix-shell \ - --run "echo Here, a nix shell for you" \ - ./tests/deployment/helm/helm-chart-shell.nix - - save_cache: - key: nix-{{ checksum "./tests/deployment/helm/helm-chart-shell.nix" }} - paths: - - /nix - - run: cat workspace/env-vars >> $BASH_ENV - - run: echo "export KUBECONFIG=$(pwd)/.kube/config" >> "${BASH_ENV}" - - run: echo "${KUBECONFIG}" - - run: - name: Template Speckle Server Helm Chart - command: | - nix-shell \ - --run "helm template speckle-server ./utils/helm/speckle-server" \ - ./tests/deployment/helm/helm-chart-shell.nix - - run: - name: Add 127.0.0.1 domains to /etc/hosts - command: | - sudo tee -a /etc/hosts \<<<'127.0.0.1 speckle.internal' - cat /etc/hosts - - run: - name: Change directory permissions to allow kind to create directories - command: | - mkdir -p "./minio-data" - if [ "$(stat -f "%A" "./minio-data")" != "775" ]; then - echo "🔐 We need 'sudo' to set permissions on minio-data directory to 775" - sudo chmod 775 "./minio-data" - fi - mkdir -p "./postgres-data" - if [ "$(stat -f "%A" "./postgres-data")" != "775" ]; then - echo "🔐 We need 'sudo' to set permissions on postgres-data directory to 775" - sudo chmod 775 "./postgres-data" - fi - - run: - name: Deploy Kubernetes (kind) cluster - command: | - nix-shell \ - --run "ctlptl apply --filename ./tests/deployment/helm/cluster-config.yaml" \ - ./tests/deployment/helmhelm-chart-shell.nix - - run: - name: Deploy Kubernetes resources to cluster - command: | - nix-shell \ - --run "LOAD_DOCKER='true' tilt ci --file ./tests/deployment/helm/Tiltfile --context kind-speckle-server --timeout 10m" \ - ./tests/deployment/helm/helm-chart-shell.nix - - docker-build: &build-job - <<: *docker-base-image - resource_class: medium - working_directory: *work-dir - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - - run: cat workspace/env-vars >> $BASH_ENV - - setup_remote_docker: - version: default - docker_layer_caching: true - - run: - name: Build and Push - command: ./.circleci/build.sh - - docker-build-server: - <<: *build-job - environment: - SPECKLE_SERVER_PACKAGE: server - - docker-build-frontend-2: - <<: *build-job - resource_class: xlarge - environment: - SPECKLE_SERVER_PACKAGE: frontend-2 - - docker-publish-frontend-2-sourcemaps: - <<: *docker-node-image - resource_class: xlarge - working_directory: *work-dir - environment: - SPECKLE_SERVER_PACKAGE: frontend-2 - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - - run: cat workspace/env-vars >> $BASH_ENV - - setup_remote_docker: - version: default - docker_layer_caching: true - - run: - name: Build and Publish sourcemaps - command: ./.circleci/build_publish_fe2_sourcemaps.sh - - docker-build-previews: - <<: *build-job - environment: - SPECKLE_SERVER_PACKAGE: preview-service - - docker-build-webhooks: - <<: *build-job - environment: - SPECKLE_SERVER_PACKAGE: webhook-service - - docker-build-file-imports: - <<: *build-job - environment: - SPECKLE_SERVER_PACKAGE: fileimport-service - - docker-build-test-container: - <<: *build-job - environment: - FOLDER: utils - SPECKLE_SERVER_PACKAGE: test-deployment - - docker-build-postgres-container: - <<: *build-job - environment: - FOLDER: utils - SPECKLE_SERVER_PACKAGE: postgres - - docker-build-monitor-container: - <<: *build-job - environment: - SPECKLE_SERVER_PACKAGE: monitor-deployment - - docker-build-docker-compose-ingress: - <<: *build-job - environment: - FOLDER: utils - SPECKLE_SERVER_PACKAGE: docker-compose-ingress - - docker-publish: &publish-job - <<: *docker-base-image - resource_class: medium - working_directory: *work-dir - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - - run: cat workspace/env-vars >> $BASH_ENV - - setup_remote_docker: - version: default - docker_layer_caching: true - - run: - name: Publish - command: ./.circleci/publish.sh - - docker-publish-server: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: server - - docker-publish-frontend-2: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: frontend-2 - - docker-publish-previews: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: preview-service - - docker-publish-webhooks: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: webhook-service - - docker-publish-file-imports: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: fileimport-service - - docker-publish-test-container: - <<: *publish-job - environment: - FOLDER: utils - SPECKLE_SERVER_PACKAGE: test-deployment - - docker-publish-postgres-container: - <<: *publish-job - environment: - FOLDER: utils - SPECKLE_SERVER_PACKAGE: postgres - - docker-publish-monitor-container: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: monitor-deployment - - docker-publish-docker-compose-ingress: - <<: *publish-job - environment: - FOLDER: utils - SPECKLE_SERVER_PACKAGE: docker-compose-ingress - - publish-npm: - <<: *docker-node-image - working_directory: *work-dir - resource_class: large - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - - run: cat workspace/env-vars >> $BASH_ENV - - *yarn - - run: - name: auth to npm as Speckle - command: | - echo "npmRegistryServer: https://registry.npmjs.org/" >> .yarnrc.yml - echo "npmAuthToken: ${NPM_TOKEN}" >> .yarnrc.yml - - run: - name: try login to npm - command: yarn npm whoami - - run: - name: build public packages - command: yarn workspaces foreach -ptvW --no-private run build - - run: - name: bump all versions - # bump all versions in dependency tree order but not in parallel - command: yarn workspaces foreach -tvW version $IMAGE_VERSION_TAG - - run: - name: publish to npm - command: 'yarn workspaces foreach -pvW --no-private npm publish --access public' - - publish-helm-chart: - docker: - - image: cimg/python:3.12.1 - working_directory: *work-dir - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - - run: cat workspace/env-vars >> $BASH_ENV - - add_ssh_keys: - fingerprints: - - '4d:68:70:66:49:97:ba:8b:8c:55:96:df:3d:be:6e:05' - - run: - name: Publish Helm Chart - command: ./.circleci/publish_helm_chart.sh - - publish-helm-chart-oci: - docker: - - image: speckle/pre-commit-runner:latest - working_directory: *work-dir - steps: - - checkout - - attach_workspace: - at: /tmp/ci/workspace - - run: cat workspace/env-vars >> $BASH_ENV - - run: - name: Publish Helm Chart - command: ./.circleci/publish_helm_chart_oci.sh - - publish-viewer-sandbox-cloudflare-pages: - <<: *docker-node-image - working_directory: *work-dir - resource_class: large - steps: - - checkout - - *yarn - - run: - name: Build public packages - command: yarn build:public - - run: - name: Lint viewer-sandbox - command: yarn lint:ci - working_directory: 'packages/viewer-sandbox' - - run: - name: Build viewer-sandbox - command: yarn build - working_directory: 'packages/viewer-sandbox' - - run: - name: Publish Viewer Sandbox to Cloudflare Pages - command: ./.circleci/publish_cloudflare_pages.sh - environment: - CLOUDFLARE_PAGES_PROJECT_NAME: viewer - VIEWER_SANDBOX_DIR_PATH: packages/viewer-sandbox diff --git a/.circleci/get_version.sh b/.circleci/get_version.sh deleted file mode 100755 index e4c28f24c..000000000 --- a/.circleci/get_version.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -set -eo pipefail - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -# shellcheck disable=SC1090,SC1091 -source "${SCRIPT_DIR}/common.sh" - -if [[ "${CIRCLE_TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "${CIRCLE_TAG}" - exit 0 -fi - -if [[ "${CIRCLE_BRANCH}" == "main" ]]; then - echo "${NEXT_RELEASE}-alpha.${CIRCLE_BUILD_NUM}" - exit 0 -fi - -# if branch name truncated contains an underscore, we should exit -if [[ "${BRANCH_NAME_TRUNCATED}" =~ "_" ]]; then - echo "Branch name contains an underscore, exiting" - exit 1 -fi - -echo "${NEXT_RELEASE}-branch.${BRANCH_NAME_TRUNCATED}.${CIRCLE_BUILD_NUM}-${COMMIT_SHA1_TRUNCATED}" -exit 0 diff --git a/.circleci/is_draft.sh b/.circleci/is_draft.sh deleted file mode 100755 index 70a69e726..000000000 --- a/.circleci/is_draft.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -# acknowledgements: https://github.com/vitalinfo/circleci-cancel-draft - -set -euf -o pipefail - -if [[ -z "${CIRCLE_PULL_REQUEST}" ]]; then - echo "FALSE" -fi - -if [[ -z "${GITHUB_TOKEN}" ]]; then - echo "GITHUB_TOKEN is not set" - exit 1 -fi - -PR_NUMBER="${CIRCLE_PULL_REQUEST//[!0-9]/}" -RESPONSE=$(curl --silent \ - -H "Authorization: token ${GITHUB_TOKEN}" \ - -H "Accept: application/vnd.github.v3+json" \ - "https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/pulls/${PR_NUMBER}" -) - -DRAFT=$(echo "${RESPONSE}" | jq ".draft") -DRAFT_LABEL=$(echo "${RESPONSE}" | jq ".labels | map(select(.name | test(\"Draft\"))) | .[]") - -if [[ ${DRAFT} == 'true' || ${DRAFT_LABEL} ]]; then - echo "TRUE" -else - echo "FALSE" -fi - -exit 0 diff --git a/.circleci/multiregion.test-ci.json b/.circleci/multiregion.test-ci.json deleted file mode 100644 index 78619c2af..000000000 --- a/.circleci/multiregion.test-ci.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "main": { - "postgres": { - "connectionUri": "postgresql://speckle:speckle@127.0.0.1:5432/speckle2_test" - }, - "blobStorage": { - "accessKey": "minioadmin", - "secretKey": "minioadmin", - "bucket": "speckle-server", - "createBucketIfNotExists": true, - "endpoint": "http://127.0.0.1:9000", - "s3Region": "us-east-1" - } - }, - "regions": { - "region1": { - "postgres": { - "connectionUri": "postgresql://speckle:speckle@127.0.0.1:5433/speckle2_test" - }, - "blobStorage": { - "accessKey": "minioadmin", - "secretKey": "minioadmin", - "bucket": "speckle-server", - "createBucketIfNotExists": true, - "endpoint": "http://127.0.0.1:9020", - "s3Region": "us-east-1" - } - }, - "region2": { - "postgres": { - "connectionUri": "postgresql://speckle:speckle@127.0.0.1:5434/speckle2_test" - }, - "blobStorage": { - "accessKey": "minioadmin", - "secretKey": "minioadmin", - "bucket": "speckle-server", - "createBucketIfNotExists": true, - "endpoint": "http://127.0.0.1:9040", - "s3Region": "us-east-1" - } - } - } -} diff --git a/.circleci/publish.sh b/.circleci/publish.sh deleted file mode 100755 index 2c36a1d01..000000000 --- a/.circleci/publish.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -# shellcheck disable=SC1090,SC1091 -source "${SCRIPT_DIR}/common.sh" - -echo "Starting tagging & publishing of image: ${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" - -echo "🐳 Logging into Docker" -echo "${DOCKER_REG_PASS}" | docker login -u "${DOCKER_REG_USER}" --password-stdin "${DOCKER_REG_URL}" - -echo "⏬ Pulling image: '${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}'" -docker pull "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" - -if [[ "${IMAGE_VERSION_TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-alpha\.[0-9]+)?$ ]]; then - echo "🏷 Tagging and pushing image as '${DOCKER_IMAGE_TAG}:latest'" - docker tag "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" "${DOCKER_IMAGE_TAG}:latest" - docker push "${DOCKER_IMAGE_TAG}:latest" - - if [[ "${IMAGE_VERSION_TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "🏷 Tagging and pushing image as '${DOCKER_IMAGE_TAG}:2'" - docker tag "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" "${DOCKER_IMAGE_TAG}:2" - docker push "${DOCKER_IMAGE_TAG}:2" - fi -else - BRANCH_TAG="${BRANCH_NAME_TRUNCATED}" - echo "🏷 Tagging and pushing image as '${DOCKER_IMAGE_TAG}:${BRANCH_TAG}'" - docker tag "${DOCKER_IMAGE_TAG}:${IMAGE_VERSION_TAG}" "${DOCKER_IMAGE_TAG}:${BRANCH_TAG}" - docker push "${DOCKER_IMAGE_TAG}:${BRANCH_TAG}" -fi - -echo "✅ Publishing completed." diff --git a/.circleci/publish_cloudflare_pages.sh b/.circleci/publish_cloudflare_pages.sh deleted file mode 100755 index bb7a35d62..000000000 --- a/.circleci/publish_cloudflare_pages.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -GIT_ROOT="$(git rev-parse --show-toplevel)" - -CLOUDFLARE_PAGES_PROJECT_NAME="${CLOUDFLARE_PAGES_PROJECT_NAME:-"viewer"}" -VIEWER_SANDBOX_DIR_PATH="${VIEWER_SANDBOX_DIR_PATH:-"packages/viewer-sandbox"}" - -pushd "${GIT_ROOT}/${VIEWER_SANDBOX_DIR_PATH}" -yarn wrangler pages deploy "${GIT_ROOT}/${VIEWER_SANDBOX_DIR_PATH}/dist" --project-name="${CLOUDFLARE_PAGES_PROJECT_NAME}" -popd diff --git a/.circleci/publish_helm_chart.sh b/.circleci/publish_helm_chart.sh deleted file mode 100755 index 718052c72..000000000 --- a/.circleci/publish_helm_chart.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -GIT_REPO=$( pwd ) -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -# shellcheck disable=SC1090,SC1091 -source "${SCRIPT_DIR}/common.sh" - -RELEASE_VERSION="${IMAGE_VERSION_TAG}" -HELM_STABLE_BRANCH="${HELM_STABLE_BRANCH:-"main"}" - -echo "Releasing Helm Chart version ${RELEASE_VERSION}" - -git clone git@github.com:specklesystems/helm.git "${HOME}/helm" - -yq e -i ".version = \"${RELEASE_VERSION}\"" "${GIT_REPO}/utils/helm/speckle-server/Chart.yaml" -yq e -i ".appVersion = \"${RELEASE_VERSION}\"" "${GIT_REPO}/utils/helm/speckle-server/Chart.yaml" -yq e -i ".docker_image_tag = \"${RELEASE_VERSION}\"" "${GIT_REPO}/utils/helm/speckle-server/values.yaml" - -if [[ -n "${CIRCLE_TAG}" || "${CIRCLE_BRANCH}" == "${HELM_STABLE_BRANCH}" ]]; then - # before overwriting the chart with the build version, check if the current chart version - # is not newer than the currently build one - - CURRENT_VERSION="$(grep ^version "${HOME}/helm/charts/speckle-server/Chart.yaml" | grep -o '2\..*')" - echo "${CURRENT_VERSION}" - - .circleci/check_version.py "${CURRENT_VERSION}" "${RELEASE_VERSION}" - if [ $? -eq 1 ] - then - echo "The current helm chart version '${CURRENT_VERSION}' is newer than the version '${RELEASE_VERSION}' we are attempting to publish. Exiting" - exit 1 - fi - rm -rf "${HOME}/helm/charts/speckle-server" - cp -r "${GIT_REPO}/utils/helm/speckle-server" "${HOME}/helm/charts/speckle-server" -else - # overwrite the name of the chart - yq e -i ".name = \"speckle-server-branch-${BRANCH_NAME_TRUNCATED}\"" "${GIT_REPO}/utils/helm/speckle-server/Chart.yaml" - rm -rf "${HOME}/helm/charts/speckle-server-branch-${BRANCH_NAME_TRUNCATED}" - cp -r "${GIT_REPO}/utils/helm/speckle-server" "${HOME}/helm/charts/speckle-server-branch-${BRANCH_NAME_TRUNCATED}" -fi - -cd ~/helm - -git add . -git -c user.email="devops+circleci@speckle.systems" -c user.name="CI" commit -m "CircleCI commit for version '${RELEASE_VERSION}'" -git push diff --git a/.circleci/publish_helm_chart_oci.sh b/.circleci/publish_helm_chart_oci.sh deleted file mode 100755 index dba8953a0..000000000 --- a/.circleci/publish_helm_chart_oci.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -if [[ -z "${IMAGE_VERSION_TAG}" ]]; then - echo "IMAGE_VERSION_TAG is not set" - exit 1 -fi -if [[ -z "${DOCKER_REG_USER}" ]]; then - echo "DOCKER_REG_USER is not set" - exit 1 -fi -if [[ -z "${DOCKER_REG_PASS}" ]]; then - echo "DOCKER_REG_PASS is not set" - exit 1 -fi - -GIT_REPO=$( pwd ) -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -# shellcheck disable=SC1090,SC1091 -source "${SCRIPT_DIR}/common.sh" - -RELEASE_VERSION="${IMAGE_VERSION_TAG}-chart" -HELM_STABLE_BRANCH="${HELM_STABLE_BRANCH:-"main"}" -DOCKER_HELM_REG_URL="${DOCKER_HELM_REG_URL:-"registry-1.docker.io"}" -DOCKER_HELM_REG_ORG="${DOCKER_HELM_REG_ORG:-"speckle"}" -CHART_NAME="${CHART_NAME:-"speckle-server"}" - -echo "Releasing Helm Chart version ${RELEASE_VERSION} for application version ${IMAGE_VERSION_TAG}" - -yq e -i ".docker_image_tag = \"${IMAGE_VERSION_TAG}\"" "${GIT_REPO}/utils/helm/speckle-server/values.yaml" - -echo "${DOCKER_REG_PASS}" | helm registry login "${DOCKER_HELM_REG_URL}" --username "${DOCKER_REG_USER}" --password-stdin -helm package "${GIT_REPO}/utils/helm/speckle-server" --version "${RELEASE_VERSION}" --app-version "${IMAGE_VERSION_TAG}" --destination "/tmp" -helm push "/tmp/${CHART_NAME}-${RELEASE_VERSION}.tgz" "oci://${DOCKER_HELM_REG_URL}/${DOCKER_HELM_REG_ORG}"