The wait command was placed inside the service loop, causing the workflow to wait after each individual service build. Moving it outside ensures all service builds run in parallel before proceeding to the next step. Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
101 lines
4.2 KiB
YAML
101 lines
4.2 KiB
YAML
name: Release Deployment
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
services:
|
|
description: 'Comma-separated list of services to deploy'
|
|
required: true
|
|
branch:
|
|
description: 'Branch to deploy (defaults to dev)'
|
|
required: false
|
|
default: 'dev'
|
|
|
|
env:
|
|
IMAGE_REGISTRY_URL: ${{ secrets.OSS_REGISTRY_URL }}
|
|
DEPOT_PROJECT_ID: ${{ secrets.DEPOT_PROJECT_ID }}
|
|
DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }}
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: ${{ github.event.inputs.branch }}
|
|
- name: Docker login
|
|
run: |
|
|
docker login $IMAGE_REGISTRY_URL -u ${{ secrets.OSS_DOCKER_USERNAME }} -p "${{ secrets.OSS_REGISTRY_TOKEN }}"
|
|
|
|
- name: Set image tag with branch info
|
|
run: |
|
|
SHORT_SHA=$(git rev-parse --short HEAD)
|
|
echo "IMAGE_TAG=${{ github.event.inputs.branch }}-${SHORT_SHA}" >> $GITHUB_ENV
|
|
echo "Using image tag: $IMAGE_TAG"
|
|
|
|
- uses: depot/setup-action@v1
|
|
|
|
- name: Build and push Docker images
|
|
run: |
|
|
# Parse the comma-separated services list into an array
|
|
IFS=',' read -ra SERVICES <<< "${{ github.event.inputs.services }}"
|
|
|
|
# Define backend services (consider moving this to workflow inputs or repo config)
|
|
ls backend/cmd >> /tmp/backend.txt
|
|
BUILD_SCRIPT_NAME="build.sh"
|
|
|
|
for SERVICE in "${SERVICES[@]}"; do
|
|
# Check if service is backend
|
|
if grep -q $SERVICE /tmp/backend.txt; then
|
|
cd backend
|
|
foss_build_args="nil $SERVICE"
|
|
ee_build_args="ee $SERVICE"
|
|
else
|
|
[[ $SERVICE == 'chalice' || $SERVICE == 'alerts' || $SERVICE == 'crons' ]] && cd $working_dir/api || cd $SERVICE
|
|
[[ $SERVICE == 'alerts' || $SERVICE == 'crons' ]] && BUILD_SCRIPT_NAME="build_${SERVICE}.sh"
|
|
ee_build_args="ee"
|
|
fi
|
|
{
|
|
echo IMAGE_TAG=$IMAGE_TAG DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=amd64 DOCKER_REPO=$IMAGE_REGISTRY_URL PUSH_IMAGE=0 bash ${BUILD_SCRIPT_NAME} $foss_build_args
|
|
IMAGE_TAG=$IMAGE_TAG DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=amd64 DOCKER_REPO=$IMAGE_REGISTRY_URL PUSH_IMAGE=0 bash ${BUILD_SCRIPT_NAME} $foss_build_args
|
|
}&
|
|
{
|
|
echo IMAGE_TAG=${IMAGE_TAG}-ee DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=amd64 DOCKER_REPO=$IMAGE_REGISTRY_URL PUSH_IMAGE=0 bash ${BUILD_SCRIPT_NAME} $ee_build_args
|
|
IMAGE_TAG=${IMAGE_TAG}-ee DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=amd64 DOCKER_REPO=$IMAGE_REGISTRY_URL PUSH_IMAGE=0 bash ${BUILD_SCRIPT_NAME} $ee_build_args
|
|
}&
|
|
done
|
|
wait
|
|
|
|
- uses: azure/k8s-set-context@v1
|
|
name: Using ee release cluster
|
|
with:
|
|
method: kubeconfig
|
|
kubeconfig: ${{ secrets.EE_RELEASE_KUBECONFIG }}
|
|
|
|
- name: Deploy to ee release Kubernetes
|
|
run: |
|
|
echo "Deploying services to EE cluster: ${{ github.event.inputs.services }}"
|
|
IFS=',' read -ra SERVICES <<< "${{ github.event.inputs.services }}"
|
|
for SERVICE in "${SERVICES[@]}"; do
|
|
SERVICE=$(echo $SERVICE | xargs) # Trim whitespace
|
|
echo "Deploying $SERVICE to EE cluster with image tag: ${IMAGE_TAG}"
|
|
kubectl set image deployment/$SERVICE-openreplay -n app $SERVICE=${IMAGE_REGISTRY_URL}/$SERVICE:${IMAGE_TAG}-ee
|
|
done
|
|
|
|
- uses: azure/k8s-set-context@v1
|
|
name: Using foss release cluster
|
|
with:
|
|
method: kubeconfig
|
|
kubeconfig: ${{ secrets.FOSS_RELEASE_KUBECONFIG }}
|
|
|
|
- name: Deploy to FOSS release Kubernetes
|
|
run: |
|
|
echo "Deploying services to FOSS cluster: ${{ github.event.inputs.services }}"
|
|
IFS=',' read -ra SERVICES <<< "${{ github.event.inputs.services }}"
|
|
for SERVICE in "${SERVICES[@]}"; do
|
|
SERVICE=$(echo $SERVICE | xargs) # Trim whitespace
|
|
echo "Deploying $SERVICE to FOSS cluster with image tag: ${IMAGE_TAG}"
|
|
echo "Deploying $SERVICE to FOSS cluster with image tag: ${IMAGE_TAG}"
|
|
kubectl set image deployment/$SERVICE-openreplay -n app $SERVICE=${IMAGE_REGISTRY_URL}/$SERVICE:${IMAGE_TAG}
|
|
done
|