commit cd633458759b73450ab84fd1befa68bafe8bdd66 Author: gitea_admin_user Date: Wed Apr 9 16:46:07 2025 +0000 Add initial files diff --git a/.gitea/workflows/cd_workflows.yml b/.gitea/workflows/cd_workflows.yml new file mode 100644 index 0000000..26e7f8d --- /dev/null +++ b/.gitea/workflows/cd_workflows.yml @@ -0,0 +1,188 @@ +name: Continuous Deployment Workflow +on: + push: + paths: + - "deployment.json" + branches: + - '*' + branches-ignore: + - main +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Parse Deployment JSON + id: parse_deployment + run: | + deployment_json=$(cat deployment.json) + echo "namespace=$(echo "$deployment_json" | jq -r '.namespace')" >> $GITHUB_ENV + echo "name=$(echo "$deployment_json" | jq -r '.name')" >> $GITHUB_ENV + echo "repoName=$(echo "$deployment_json" | jq -r '.repoName')" >> $GITHUB_ENV + echo "branchName=$(echo "$deployment_json" | jq -r '.branchName')" >> $GITHUB_ENV + echo "version=$(echo "$deployment_json" | jq -r '.version')" >> $GITHUB_ENV + echo "shortVersion=\"$(echo "$deployment_json" | jq -r '.version' | cut -c1-10)\"" >> $GITHUB_ENV + echo "secrets=$(echo "$deployment_json" | jq -r '.environment.secrets[]' | paste -sd ",")" >> $GITHUB_ENV # Updated + echo "variables=$(echo "$deployment_json" | jq -r '.environment.variables[]' | paste -sd ",")" >> $GITHUB_ENV # Updated + echo "resources=$(echo "$deployment_json" | jq -c '.resources')" >> $GITHUB_ENV + + - name: Generate values.yaml + env: + CI_USER: ${{ secrets.CI_USER }} + CI_USER_TOKEN: ${{ secrets.CI_USER_TOKEN }} + secrets: ${{ env.secrets }} + variables: ${{ env.variables }} + resources: ${{ env.resources }} + namespace: ${{ env.namespace }} + name: ${{ env.name }} + repoName: ${{ env.repoName }} + branchName: ${{ env.branchName }} + version: ${{ env.version }} + shortVersion: ${{ env.shortVersion }} + run: | + set -euo pipefail + echo "namespace: $namespace" > values.yaml + echo "name: $name" >> values.yaml + echo "repoName: $repoName" >> values.yaml + echo "branchName: $branchName" >> values.yaml + echo "version: $version" >> values.yaml + echo "shortVersion: $shortVersion" >> values.yaml + echo "environment:" >> values.yaml + + # Process secrets + echo " secrets:" >> values.yaml + IFS=',' read -ra SECRET_NAMES <<< "$secrets" + for secret_name in "${SECRET_NAMES[@]}"; do + secret_value="${!secret_name}" + echo " - name: $secret_name" >> values.yaml + echo " value: \"$secret_value\"" >> values.yaml + done + + # echo " - name: CI_USER" >> values.yaml + # echo " value: \"$CI_USER\"" >> values.yaml + + # echo " - name: CI_USER_TOKEN" >> values.yaml + # echo " value: \"$CI_USER_TOKEN\"" >> values.yaml + + + # Process variables + # echo " variables:" >> values.yaml + # IFS=',' read -ra VARIABLE_NAMES <<< "$variables" + # for variable_name in "${VARIABLE_NAMES[@]}"; do + # variable_value="${!variable_name}" # Access the actual value dynamically + # echo " - name: $variable_name" >> values.yaml + # echo " value: \"$variable_value\"" >> values.yaml + # done + + echo " variables:" >> values.yaml + echo " - name: REPO_NAME" >> values.yaml + echo " value: \"$repoName\"" >> values.yaml + echo " - name: BRANCH_NAME" >> values.yaml + echo " value: \"$branchName\"" >> values.yaml + echo " - name: VERSION" >> values.yaml + echo " value: \"$version\"" >> values.yaml + echo " - name: NAMESPACE" >> values.yaml + echo " value: \"$namespace\"" >> values.yaml + echo " - name: FLOWX_ENGINE_ADDRESS" >> values.yaml + echo " value: centurion-workflow-frontend.default.svc.cluster.local:7233" >> values.yaml + + # Process resources + echo "resources:" >> values.yaml + echo "$resources" | jq -r ' + . as $root | + " limits:\n cpu: \($root.limits.cpu)\n memory: \($root.limits.memory)\n requests:\n cpu: \($root.requests.cpu)\n memory: \($root.requests.memory)" + ' >> values.yaml + + echo "Generated values.yaml:" + cat values.yaml + + - name: Install Helm + run: | + if ! command -v helm >/dev/null 2>&1; then + curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash + fi + + - name: Ensure kubectl is Installed + run: | + if ! command -v kubectl >/dev/null 2>&1; then + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + chmod +x kubectl + sudo mv kubectl /usr/local/bin/ + fi + + - name: Set Up Kubeconfig + run: | + echo "${{ secrets.KUBECONFIG_CONTENT }}" > kubeconfig + chmod 600 kubeconfig + export KUBECONFIG=$(pwd)/kubeconfig + kubectl config use-context ci-cd-user-context + echo "KUBECONFIG=$(pwd)/kubeconfig" >> $GITHUB_ENV + kubectl config view + + - name: Deploy with Helm + env: + CI_USER: ${{ secrets.CI_USER }} + CI_USER_TOKEN: ${{ secrets.CI_USER_TOKEN }} + namespace: ${{ env.namespace }} + repoName: ${{ env.repoName }} + branchName: ${{ env.branchName }} + version: ${{ env.version }} + run: | + set -euo pipefail + + # Sanitize and construct the release name + RELEASE_NAME=$(echo "${repoName}-${branchName}" | tr '_' '-' | tr '[:upper:]' '[:lower:]') + + # Ensure the release name meets Helm's naming conventions + if ! echo "$RELEASE_NAME" | grep -Eq '^[a-z]([-a-z0-9]*[a-z0-9])?$'; then + echo "Error: Release name '$RELEASE_NAME' is invalid." + exit 1 + fi + + # Login to the OCI registry + echo "$CI_USER_TOKEN" | helm registry login centurion-version-control.default.svc.cluster.local:3000 \ + --username "$CI_USER" --password-stdin --insecure + + pwd + ls -l + chmod 644 values.yaml + yq eval values.yaml + + # Pull the chart from the OCI registry + helm pull oci://centurion-version-control.default.svc.cluster.local:3000/centurion/helm/block-worker \ + --version 0.1.4 \ + --plain-http \ + --untar + + # helm upgrade --install "$RELEASE_NAME" \ + # ./block-worker \ + # --version 0.1.4 \ + # --namespace "$namespace" \ + # --values values.yaml \ + # --plain-http \ + # --debug \ + # --wait \ + # --create-namespace + # --timeout 300s + + { + helm upgrade --install "$RELEASE_NAME" \ + ./block-worker \ + --version 0.1.4 \ + --namespace "$namespace" \ + --values values.yaml \ + --set imageRegistry.server="version-control.mcard.hudsondata.ai" \ + --set imageRegistry.username="$CI_USER" \ + --set imageRegistry.password="$CI_USER_TOKEN" \ + --debug \ + --atomic \ + --create-namespace \ + --timeout 150s + } || { + echo "Deployment failed. Cleaning up..." + helm uninstall "$RELEASE_NAME" -n "$namespace" --debug || true + kubectl delete all --selector "app.kubernetes.io/instance=$RELEASE_NAME" -n "$namespace" || true + exit 1 + } diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4bf48f --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +ReadMe diff --git a/deployment.json b/deployment.json new file mode 100644 index 0000000..9f53b99 --- /dev/null +++ b/deployment.json @@ -0,0 +1,21 @@ +{ + "namespace": "default", + "name": "name", + "version": "sha", + "repoName": "repoName", + "branchName": "branchName", + "environment": { + "secrets": [], + "variables": [] + }, + "resources": { + "limits": { + "cpu": "500m", + "memory": "512Mi" + }, + "requests": { + "cpu": "250m", + "memory": "256Mi" + } + } +}