diff --git a/.github/workflows/patch-build.yaml b/.github/workflows/patch-build.yaml new file mode 100644 index 000000000..d980cd336 --- /dev/null +++ b/.github/workflows/patch-build.yaml @@ -0,0 +1,103 @@ +# Ref: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions + +on: + workflow_dispatch: + description: 'This workflow will build for patches for latest tag, and will Always use commit from main branch.' + inputs: + build_service: + description: 'Comma separated names of services to build(in small letters).' + required: true + +name: Build patches from main branch, Raise PR to Main, and Push to tag + +jobs: + deploy: + name: Deploy + runs-on: ubuntu-latest + env: + DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }} + DEPOT_PROJECT_ID: ${{ secrets.DEPOT_PROJECT_ID }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - name: Downloading yq + run: | + VERSION="v4.42.1" + sudo wget https://github.com/mikefarah/yq/releases/download/${VERSION}/yq_linux_amd64 -O /usr/bin/yq + sudo chmod +x /usr/bin/yq + + # Configure AWS credentials for the first registry + - name: Configure AWS credentials for RELEASE_ARM_REGISTRY + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_DEPOT_ACCESS_KEY }} + aws-secret-access-key: ${{ secrets.AWS_DEPOT_SECRET_KEY }} + aws-region: ${{ secrets.AWS_DEPOT_DEFAULT_REGION }} + + - name: Login to Amazon ECR for RELEASE_ARM_REGISTRY + id: login-ecr-arm + run: | + aws ecr get-login-password --region ${{ secrets.AWS_DEPOT_DEFAULT_REGION }} | docker login --username AWS --password-stdin ${{ secrets.RELEASE_ARM_REGISTRY }} + aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${{ secrets.RELEASE_OSS_REGISTRY }} + + - uses: depot/setup-action@v1 + + - name: Build + id: build-image + env: + DOCKER_REPO_ARM: ${{ secrets.RELEASE_ARM_REGISTRY }} + DOCKER_REPO_OSS: ${{ secrets.RELEASE_OSS_REGISTRY }} + run: | + set -ex + working_dir=$(pwd) + function image_version(){ + local service=$1 + chart_path="$working_dir/scripts/helmcharts/openreplay/charts/$service/Chart.yaml" + current_version=$(yq eval '.AppVersion' $chart_path) + new_version=$(echo $current_version | awk -F. '{$NF += 1 ; print $1"."$2"."$3}') + echo $new_version + # yq eval ".AppVersion = \"$new_version\"" -i $chart_path + } + # Checking for backend images + ls backend/cmd >> /tmp/backend.txt + IFS=',' read -ra SERVICES <<< "${{ github.event.inputs.services }}" + # Build FOSS + 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 + cd $SERVICE + ee_build_args="ee" + fi + version=$(image_version $SERVICE) + echo IMAGE_TAG=$version DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=amd64 DOCKER_REPO=$DOCKER_REPO_OSS PUSH_IMAGE=0 bash build.sh $foss_build_args + echo IMAGE_TAG=$version DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=amd64 DOCKER_REPO=$DOCKER_REPO_OSS PUSH_IMAGE=0 bash build.sh $ee_build_args + echo IMAGE_TAG=$version DOCKER_RUNTIME="depot" DOCKER_BUILD_ARGS="--push" ARCH=arm64 DOCKER_REPO=$DOCKER_REPO_ARM PUSH_IMAGE=0 bash build.sh $foss_build_args + cd $working_dir + done + + - name: Alert slack + if: ${{ failure() }} + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_CHANNEL: ee + SLACK_TITLE: "Failed ${{ github.workflow }}" + SLACK_COLOR: ${{ job.status }} # or a specific color like 'good' or '#ff00ff' + SLACK_WEBHOOK: ${{ secrets.SLACK_WEB_HOOK }} + SLACK_USERNAME: "OR Bot" + SLACK_MESSAGE: 'Build failed :bomb:' + + - name: Debug Job + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 + env: + DOCKER_REPO: ${{ secrets.EE_REGISTRY_URL }} + IMAGE_TAG: ${{ github.sha }} + ENVIRONMENT: staging