Skip to content

Update workflow to include logic to update gitops repo #4

Update workflow to include logic to update gitops repo

Update workflow to include logic to update gitops repo #4

# update version for each build in this file
name: Docker Image CI
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# update image tags based on update to each component here
env:
PRODUCER_IMAGE: producer:2.0.0
PROCESSOR_IMAGE: processor:2.0.0
GRPC_SERVER_IMAGE: grpc-server:2.0.0
GRPC_CLIENT_IMAGE: grpc-client:2.0.0
GITOPS_REPO: srivathsashreyas/metrics-collector-py-gitops
jobs:
# each job:
# 1. logs in to dockerhub (secrets are configured in github)
# 2. builds the docker image with the tag <registry>/<username>/image:version
# 3. pushes the image with the given tag to dockerhub
# note: avoid using the -p flag when performing docker login since
# this docker login with the -p flag requires an interactive terminal
# since github action servers do not provide an interactive terminal,
# use --password-stdin instead
build-and-push-producer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to dockerhub
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login docker.io -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
- name: Build the producer image
run: docker build -f deploy/producer/Dockerfile -t docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.PRODUCER_IMAGE}} .
- name: Push the producer image
run: docker push docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.PRODUCER_IMAGE}}
build-and-push-processor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to dockerhub
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login docker.io -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
- name: Build the processor image
run: docker build -f deploy/processor/Dockerfile -t docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.PROCESSOR_IMAGE}} .
- name: Push the processor image
run: docker push docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.PROCESSOR_IMAGE}}
build-and-push-grpc-server:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to dockerhub
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login docker.io -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
- name: Build the server image
run: docker build -f deploy/server/Dockerfile -t docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.GRPC_SERVER_IMAGE}} .
- name: Push the server image
run: docker push docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.GRPC_SERVER_IMAGE}}
build-and-push-grpc-client:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to dockerhub
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login docker.io -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
- name: Build the client image
run: docker build -f deploy/client/Dockerfile -t docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.GRPC_CLIENT_IMAGE}} .
- name: Push the client image
run: docker push docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{env.GRPC_CLIENT_IMAGE}}
update-image-tags-in-gitops-repo:
needs: [build-and-push-producer, build-and-push-processor, build-and-push-grpc-server, build-and-push-grpc-client]
runs-on: ubuntu-latest
steps:
- name: Checkout gitops repo
uses: actions/checkout@v4
with:
repository: ${{ env.GITOPS_REPO }}
token: ${{ secrets.REPO_PAT }}
- name: Update image tags in values.yaml based on env specification
run: |
sed -i -r 's/grpc-client:(.)+/grpc-client:${{env.GRPC_CLIENT_IMAGE}}/g' values.yaml
sed -i -r 's/grpc-server:(.)+/grpc-server:${{env.GRPC_SERVER_IMAGE}}/g' values.yaml
sed -i -r 's/processor:(.)+/processor:${{env.PROCESSOR_IMAGE}}/g' values.yaml
sed -i -r 's/producer:(.)+/producer:${{env.PRODUCER_IMAGE}}/g' values.yaml
- name: Commit and push changes
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add values.yaml
git commit -m "Update image tags in values.yaml"
git push