# Ref: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions on: workflow_dispatch: inputs: build_service: description: 'Name of a single service to build(in small letters). "all" to build everything' required: false default: 'false' push: branches: - dev paths: - backend/** name: Build and deploy workers jobs: deploy: name: Deploy runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: # We need to diff with old commit # to see which workers got changed. fetch-depth: 2 # ref: staging - name: Docker login run: | docker login ${{ secrets.OSS_REGISTRY_URL }} -u ${{ secrets.OSS_DOCKER_USERNAME }} -p "${{ secrets.OSS_REGISTRY_TOKEN }}" - uses: azure/k8s-set-context@v1 with: method: kubeconfig kubeconfig: ${{ secrets.OSS_KUBECONFIG }} # Use content of kubeconfig in secret. id: setcontext # Caching docker images # - uses: satackey/action-docker-layer-caching@v0.0.11 # # Ignore the failure of a step and avoid terminating the job. # continue-on-error: true - name: Build, tag id: build-image env: DOCKER_REPO: ${{ secrets.OSS_REGISTRY_URL }} IMAGE_TAG: ${{ github.sha }} ENVIRONMENT: staging run: | # # TODO: Check the container tags are same, then skip the build and deployment. # # Build a docker container and push it to Docker Registry so that it can be deployed to Kubernetes cluster. # # Getting the images to build # set -x touch /tmp/images_to_build.txt tmp_param=${{ github.event.inputs.build_service }} build_param=${tmp_param:-'false'} case ${build_param} in false) { git diff --name-only HEAD HEAD~1 | grep -E "backend/cmd|backend/services" | grep -vE ^ee/ | cut -d '/' -f3 git diff --name-only HEAD HEAD~1 | grep -E "backend/pkg|backend/internal" | grep -vE ^ee/ | cut -d '/' -f3 | uniq | while read -r pkg_name ; do grep -rl "pkg/$pkg_name" backend/services backend/cmd | cut -d '/' -f3 done } | uniq > /tmp/images_to_build.txt ;; all) ls backend/cmd > /tmp/images_to_build.txt ;; *) echo ${{github.event.inputs.build_service }} > /tmp/images_to_build.txt ;; esac [[ $(cat /tmp/images_to_build.txt) != "" ]] || (echo "Nothing to build here"; exit 1) # # Pushing image to registry # cd backend for image in $(cat /tmp/images_to_build.txt); do echo "Bulding $image" PUSH_IMAGE=1 bash -x ./build.sh skip $image echo "::set-output name=image::$DOCKER_REPO/$image:$IMAGE_TAG" done - name: Deploying to kuberntes env: IMAGE_TAG: ${{ github.sha }} run: | # # Deploying image to environment. # cd scripts/helmcharts/ ## Update secerts sed -i "s#openReplayContainerRegistry.*#openReplayContainerRegistry: \"${{ secrets.OSS_REGISTRY_URL }}\"#g" vars.yaml sed -i "s/postgresqlPassword: \"changeMePassword\"/postgresqlPassword: \"${{ secrets.OSS_PG_PASSWORD }}\"/g" vars.yaml sed -i "s/accessKey: \"changeMeMinioAccessKey\"/accessKey: \"${{ secrets.OSS_MINIO_ACCESS_KEY }}\"/g" vars.yaml sed -i "s/secretKey: \"changeMeMinioPassword\"/secretKey: \"${{ secrets.OSS_MINIO_SECRET_KEY }}\"/g" vars.yaml sed -i "s/jwt_secret: \"SetARandomStringHere\"/jwt_secret: \"${{ secrets.OSS_JWT_SECRET }}\"/g" vars.yaml sed -i "s/domainName: \"\"/domainName: \"${{ secrets.OSS_DOMAIN_NAME }}\"/g" vars.yaml set -x echo > /tmp/image_override.yaml mkdir /tmp/helmcharts mv openreplay/charts/ingress-nginx /tmp/helmcharts/ ## Update images for image in $(cat /tmp/images_to_build.txt); do mv openreplay/charts/$image /tmp/helmcharts/ cat <>/tmp/image_override.yaml ${image}: image: # We've to strip off the -ee, as helm will append it. tag: ${IMAGE_TAG} EOF done ls /tmp/helmcharts rm -rf openreplay/charts/* ls openreplay/charts mv /tmp/helmcharts/* openreplay/charts/ ls openreplay/charts cat /tmp/image_override.yaml # Deploy command helm template openreplay -n app openreplay -f vars.yaml -f /tmp/image_override.yaml --set ingress-nginx.enabled=false --set skipMigration=true | kubectl apply -f - # - name: Debug Job # if: ${{ failure() }} # uses: mxschmitt/action-tmate@v3 # env: # DOCKER_REPO: ${{ secrets.OSS_REGISTRY_URL }} # IMAGE_TAG: ${{ github.sha }} # ENVIRONMENT: staging #