feat(ci): release pipeline moved to gha, disabled release on circle ci (#4905)
This commit is contained in:
committed by
GitHub
parent
8d20d0620f
commit
8e15d51e9a
Executable
+88
@@ -0,0 +1,88 @@
|
||||
#!/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)
|
||||
@@ -4,9 +4,6 @@ set -eo pipefail
|
||||
# shellcheck disable=SC2034
|
||||
DOCKER_IMAGE_TAG="speckle/speckle-${SPECKLE_SERVER_PACKAGE}"
|
||||
|
||||
# shellcheck disable=SC2034,SC2086
|
||||
IMAGE_VERSION_TAG="${IMAGE_VERSION_TAG:-${GITHUB_SHA}}"
|
||||
|
||||
# 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
|
||||
|
||||
@@ -14,7 +11,7 @@ LAST_RELEASE="$(git describe --always --tags $(git rev-list --tags) | grep -E '^
|
||||
NEXT_RELEASE="$(echo "${LAST_RELEASE}" | awk -F. -v OFS=. '{$NF += 1 ; print}')"
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
BRANCH_NAME_TRUNCATED="$(echo "${GITHUB_HEAD_REF}" | cut -c -50 | sed 's/[^a-zA-Z0-9.-]/-/g')" # docker has a 128 character tag limit, so ensuring the branch name will be short enough
|
||||
BRANCH_NAME_TRUNCATED="$(echo "${GITHUB_REF_NAME}" | cut -c -28 | sed 's/[^a-zA-Z0-9.-]/-/g')" # docker has a 128 character tag limit, so ensuring the branch name will be short enough
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
COMMIT_SHA1_TRUNCATED="$(echo "${GITHUB_SHA}" | cut -c -7)"
|
||||
|
||||
@@ -5,14 +5,13 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
source "${SCRIPT_DIR}/common.sh"
|
||||
|
||||
|
||||
if [[ "${GITHUB_REF}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "${GITHUB_REF}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "${GITHUB_HEAD_REF}" == "main" ]]; then
|
||||
echo "${NEXT_RELEASE}-alpha.${GITHUB_RUN_ID}"
|
||||
echo "${NEXT_RELEASE}-alpha.${GITHUB_RUN_NUMBER}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -22,5 +21,5 @@ if [[ "${BRANCH_NAME_TRUNCATED}" =~ "_" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "${NEXT_RELEASE}-branch.${BRANCH_NAME_TRUNCATED}.${GITHUB_RUN_ID}-${COMMIT_SHA1_TRUNCATED}"
|
||||
echo "${NEXT_RELEASE}-branch.${BRANCH_NAME_TRUNCATED}.${GITHUB_RUN_NUMBER}-${COMMIT_SHA1_TRUNCATED}"
|
||||
exit 0
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
|
||||
echo "🏷️ Preparing envs"
|
||||
|
||||
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
|
||||
|
||||
echo "✅ Publishing completed."
|
||||
Regular → Executable
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
echo "🏷️ Setting envs"
|
||||
|
||||
GIT_ROOT="$(git rev-parse --show-toplevel)"
|
||||
GIT_HELM="$(dirname "$GIT_ROOT")/helm"
|
||||
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"}"
|
||||
|
||||
|
||||
if [[ -z "${RELEASE_VERSION}" ]]; then
|
||||
echo "IMAGE_VERSION_TAG is not set: ${IMAGE_VERSION_TAG} ${RELEASE_VERSION}"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -d "${GIT_HELM}/.git" ]; then
|
||||
echo "helm repo not found at ${GIT_HELM} "
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -d "${GIT_ROOT}/.git" ]; then
|
||||
echo "speckle repo not found at ${GIT_ROOT}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✏️ Editing Helm Chart version ${RELEASE_VERSION}"
|
||||
|
||||
yq e -i ".version = \"${RELEASE_VERSION}\"" "${GIT_ROOT}/utils/helm/speckle-server/Chart.yaml"
|
||||
yq e -i ".appVersion = \"${RELEASE_VERSION}\"" "${GIT_ROOT}/utils/helm/speckle-server/Chart.yaml"
|
||||
yq e -i ".docker_image_tag = \"${RELEASE_VERSION}\"" "${GIT_ROOT}/utils/helm/speckle-server/values.yaml"
|
||||
|
||||
if [[ "${GITHUB_REF}" == refs/tags/* || "${GITHUB_REF_NAME}" == "${HELM_STABLE_BRANCH}" ]]; then
|
||||
echo "⚠️ prod release ${RELEASE_VERSION}"
|
||||
# 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 "${GIT_HELM}/charts/speckle-server/Chart.yaml" | grep -o '2\..*')"
|
||||
echo "ℹ️ Current version ${CURRENT_VERSION}"
|
||||
|
||||
.github/workflows/scripts/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 "${GIT_HELM}/charts/speckle-server"
|
||||
cp -r "${GIT_ROOT}/utils/helm/speckle-server" "${GIT_HELM}/charts/speckle-server"
|
||||
else
|
||||
# overwrite the name of the chart
|
||||
yq e -i ".name = \"speckle-server-branch-${BRANCH_NAME_TRUNCATED}\"" "${GIT_ROOT}/utils/helm/speckle-server/Chart.yaml"
|
||||
rm -rf "${GIT_HELM}/charts/speckle-server-branch-${BRANCH_NAME_TRUNCATED}"
|
||||
cp -r "${GIT_ROOT}/utils/helm/speckle-server" "${GIT_HELM}/charts/speckle-server-branch-${BRANCH_NAME_TRUNCATED}"
|
||||
fi
|
||||
|
||||
echo "💾 Pushing commit"
|
||||
|
||||
cd "${GIT_HELM}"
|
||||
|
||||
git add .
|
||||
git -c user.email="devops+gha@speckle.systems" -c user.name="CI" commit -m "Github action commit for version '${RELEASE_VERSION}'"
|
||||
git push
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
#!/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
|
||||
|
||||
echo "🏷️ Preparing envs"
|
||||
|
||||
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}"
|
||||
Reference in New Issue
Block a user