Adding support of litmus portal build using github workflow and removing circleci (#2594)

* Adding portal pipeline script to github workflows

Signed-off-by: Raj Das <mail.rajdas@gmail.com>

* removing hack and .circleci directory

Signed-off-by: Raj Das <mail.rajdas@gmail.com>

* changing checkout action version to v2

Signed-off-by: Raj Das <mail.rajdas@gmail.com>

* changing checkout action version to v2

Signed-off-by: Raj Das <mail.rajdas@gmail.com>
This commit is contained in:
Raj Babu Das 2021-03-24 13:12:46 +05:30 committed by GitHub
parent 609ac26421
commit d02d285bf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 323 additions and 310 deletions

View File

@ -1,253 +0,0 @@
---
version: 2.1
executors:
golang:
docker:
- image: circleci/golang:1.14.8-node
resource_class: large
nodejs:
docker:
- image: circleci/node:10.0.0
resource_class: large
cosmic:
docker:
- image: circleci/buildpack-deps:cosmic
resource_class: medium
jobs:
backend-services-checks:
executor: golang
steps:
- checkout
- run:
name: Run backend service checks
command: make backend-services-checks
working_directory: ~/project/litmus-portal
frontend-services-checks:
executor: nodejs
steps:
- checkout
- run:
name: Run frontend service checks
command: make frontend-services-checks
working_directory: ~/project/litmus-portal
setup-env:
executor: cosmic
steps:
- run: mkdir -p workspace
- run:
name: Setup ENV
command: |
echo 'export REPONAME="litmuschaos"' >> workspace/env-vars
echo 'export GRAPHQL_SERVER_IMAGE="litmusportal-server"' >> workspace/env-vars
echo 'export AUTHENTICATION_SERVER_IMAGE="litmusportal-auth-server"' >> workspace/env-vars
echo 'export FRONTEND_IMAGE="litmusportal-frontend"' >> workspace/env-vars
echo 'export SUBSCRIBER_IMAGE="litmusportal-subscriber"' >> workspace/env-vars
echo 'export EVENT_TRACKER="litmusportal-event-tracker"' >> workspace/env-vars
tag=""
if [ "$CIRCLE_BRANCH" == "" ]; then
tag="$CIRCLE_TAG"
else
tag="ci"
fi;
echo export IMGTAG=$tag >> workspace/env-vars
cat workspace/env-vars >> $BASH_ENV
source $BASH_ENV
- persist_to_workspace:
root: workspace
paths:
- env-vars
docker-build-backend:
machine:
image: circleci/classic:201808-01
resource_class: large
steps:
- attach_workspace:
at: /tmp/workspace
- run: |
cat /tmp/workspace/env-vars >> $BASH_ENV
source $BASH_ENV
- checkout
- run:
name: Build graphql server docker image
command: docker build . -f build/Dockerfile -t ${REPONAME}/${GRAPHQL_SERVER_IMAGE}:${IMGTAG}
working_directory: ~/project/litmus-portal/graphql-server
- run:
name: Save graphql server docker image
command: docker save -o /tmp/workspace/${GRAPHQL_SERVER_IMAGE}.tar ${REPONAME}/${GRAPHQL_SERVER_IMAGE}:${IMGTAG}
- run:
name: Build auth server docker image
command: docker images && docker build . -f Dockerfile -t ${REPONAME}/${AUTHENTICATION_SERVER_IMAGE}:${IMGTAG}
working_directory: ~/project/litmus-portal/authentication
- run:
name: Save auth server docker image
command: docker save -o /tmp/workspace/${AUTHENTICATION_SERVER_IMAGE}.tar ${REPONAME}/${AUTHENTICATION_SERVER_IMAGE}:${IMGTAG}
- run:
name: Build subscriber docker image
command: docker build . -f build/Dockerfile -t ${REPONAME}/${SUBSCRIBER_IMAGE}:${IMGTAG}
working_directory: ~/project/litmus-portal/cluster-agents/subscriber
- run:
name: Save subscriber docker image
command: docker save -o /tmp/workspace/${SUBSCRIBER_IMAGE}.tar ${REPONAME}/${SUBSCRIBER_IMAGE}:${IMGTAG}
- run:
name: Build event tracker docker image
command: docker build . -f build/Dockerfile -t ${REPONAME}/${EVENT_TRACKER}:${IMGTAG}
working_directory: ~/project/litmus-portal/cluster-agents/event-tracker
- run:
name: Save event tracker docker image
command: docker save -o /tmp/workspace/${EVENT_TRACKER}.tar ${REPONAME}/${EVENT_TRACKER}:${IMGTAG}
- persist_to_workspace:
root: /tmp/workspace
paths:
- litmusportal-server.tar
- litmusportal-subscriber.tar
- litmusportal-auth-server.tar
- litmusportal-event-tracker.tar
docker-build-frontend:
machine:
image: circleci/classic:201808-01
resource_class: large
steps:
- attach_workspace:
at: /tmp/workspace
- run: |
cat /tmp/workspace/env-vars >> $BASH_ENV
source $BASH_ENV
- checkout
- run:
name: Build frontend docker image
no_output_timeout: 20m
command: |
timestamp=`date "+%s"`
docker build . -f Dockerfile -t ${REPONAME}/${FRONTEND_IMAGE}:${IMGTAG} --build-arg REACT_APP_KB_CHAOS_VERSION=${IMGTAG} --build-arg REACT_APP_BUILD_TIME="$timestamp"
working_directory: ~/project/litmus-portal/frontend
- run:
name: Save frontend docker image
command: docker save -o /tmp/workspace/${FRONTEND_IMAGE}.tar ${REPONAME}/${FRONTEND_IMAGE}:${IMGTAG}
- persist_to_workspace:
root: /tmp/workspace
paths:
- litmusportal-frontend.tar
docker-push:
machine:
image: circleci/classic:201808-01
resource_class: large
steps:
- attach_workspace:
at: /tmp/workspace
- run: |
cat /tmp/workspace/env-vars >> $BASH_ENV
source $BASH_ENV
- checkout
- run:
name: Loading all docker images
command: |
docker load -i /tmp/workspace/${GRAPHQL_SERVER_IMAGE}.tar
docker load -i /tmp/workspace/${SUBSCRIBER_IMAGE}.tar
docker load -i /tmp/workspace/${AUTHENTICATION_SERVER_IMAGE}.tar
docker load -i /tmp/workspace/${FRONTEND_IMAGE}.tar
docker load -i /tmp/workspace/${EVENT_TRACKER}.tar
- run:
name: Pushing graphql server image
command: bash ./hack/push --TYPE=ci --REPONAME=${REPONAME} --IMGNAME=${GRAPHQL_SERVER_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing frontend image
command: bash ./hack/push --TYPE=ci --REPONAME=${REPONAME} --IMGNAME=${FRONTEND_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing auth server image
command: bash ./hack/push --TYPE=ci --REPONAME=${REPONAME} --IMGNAME=${AUTHENTICATION_SERVER_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing subscriber server image
command: bash ./hack/push --TYPE=ci --REPONAME=${REPONAME} --IMGNAME=${SUBSCRIBER_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing event-tracker
command: bash ./hack/push --TYPE=ci --REPONAME=${REPONAME} --IMGNAME=${EVENT_TRACKER} --IMGTAG=${IMGTAG}
release:
machine:
image: circleci/classic:201808-01
resource_class: large
steps:
- attach_workspace:
at: /tmp/workspace
- run: |
cat /tmp/workspace/env-vars >> $BASH_ENV
source $BASH_ENV
- checkout
- run:
name: Loading all docker images
command: |
docker load -i /tmp/workspace/${GRAPHQL_SERVER_IMAGE}.tar
docker load -i /tmp/workspace/${SUBSCRIBER_IMAGE}.tar
docker load -i /tmp/workspace/${AUTHENTICATION_SERVER_IMAGE}.tar
docker load -i /tmp/workspace/${FRONTEND_IMAGE}.tar
docker load -i /tmp/workspace/${EVENT_TRACKER}.tar
- run:
name: Docker images
command: docker images
- run:
name: Pushing graphql server image
command: bash ./hack/push --TYPE=release --REPONAME=${REPONAME} --IMGNAME=${GRAPHQL_SERVER_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing frontend image
command: bash ./hack/push --TYPE=release --REPONAME=${REPONAME} --IMGNAME=${FRONTEND_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing auth server image
command: bash ./hack/push --TYPE=release --REPONAME=${REPONAME} --IMGNAME=${AUTHENTICATION_SERVER_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing subscriber server image
command: bash ./hack/push --TYPE=release --REPONAME=${REPONAME} --IMGNAME=${SUBSCRIBER_IMAGE} --IMGTAG=${IMGTAG}
- run:
name: Pushing event-tracker
command: bash ./hack/push --TYPE=release --REPONAME=${REPONAME} --IMGNAME=${EVENT_TRACKER} --IMGTAG=${IMGTAG}
workflows:
version: 2
litmus-portal:
jobs:
- frontend-services-checks:
filters:
tags:
only: /.*/
- backend-services-checks:
filters:
tags:
only: /.*/
- setup-env:
filters:
tags:
only: /.*/
- docker-build-frontend:
requires:
- setup-env
- frontend-services-checks
- backend-services-checks
filters:
tags:
only: /.*/
- docker-build-backend:
requires:
- setup-env
- backend-services-checks
- frontend-services-checks
filters:
tags:
only: /.*/
- docker-push:
requires:
- docker-build-backend
- docker-build-frontend
filters:
branches:
only:
- master
- /^v.*/
- release:
requires:
- docker-build-backend
- docker-build-frontend
filters:
## release jobs needs to be run for tagged releases alone & not for any branch commits
branches:
ignore: /.*/
tags:
only: /.*/

93
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,93 @@
name: build-pipeline
on:
pull_request:
branches:
- master
- v*
- litmus-v2
jobs:
backend-checks:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- shell: bash
run: |
cd litmus-portal
make backend-services-checks
frontend-checks:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- shell: bash
run: |
cd litmus-portal
make frontend-services-checks
docker-build-graphql-server:
runs-on: ubuntu-latest
needs:
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build graphql server docker image
shell: bash
run: |
cd litmus-portal/graphql-server
docker build . -f build/Dockerfile
docker-build-authentication-server:
runs-on: ubuntu-latest
needs:
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build auth server docker image
shell: bash
run: |
cd litmus-portal/authentication
docker images && docker build . -f Dockerfile
docker-build-subscriber:
runs-on: ubuntu-latest
needs:
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build subscriber docker image
shell: bash
run: |
cd litmus-portal/cluster-agents/subscriber
docker build . -f build/Dockerfile
docker-build-event-tracker:
runs-on: ubuntu-latest
needs:
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build event tracker docker image
shell: bash
run: |
cd litmus-portal/cluster-agents/event-tracker
docker build . -f build/Dockerfile
docker-build-frontend:
runs-on: ubuntu-latest
needs:
- frontend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build frontend docker image
shell: bash
run: |
cd litmus-portal/frontend
docker build . -f Dockerfile

230
.github/workflows/push.yml vendored Normal file
View File

@ -0,0 +1,230 @@
name: push-pipeline
on:
push:
branches:
- master
- v*
tags:
- '*'
jobs:
backend-checks:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- shell: bash
run: |
cd litmus-portal
make backend-services-checks
frontend-checks:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- shell: bash
run: |
cd litmus-portal
make frontend-services-checks
get-envs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- shell: bash
run: |
img_tag=""
array=(`echo ${GITHUB_REF} | sed 's/\//\n/g'`)
if [ ${array[1]} == "tags" ]
then
echo "tag build"
img_tag=${GITHUB_REF#refs/*/}
else
echo "non tag build"
img_tag="ci"
fi
# This is a condition where image tag looks like "pull/<pullrequest-name>" during pull request build
NEW_IMG_TAG=`echo $img_tag | sed "s/\//-/g"`
echo $NEW_IMG_TAG
echo export IMG_TAG=$NEW_IMG_TAG >> env-vars
echo export GRAPHQL_SERVER_IMAGE="litmusportal-server" >> env-vars
echo export AUTHENTICATION_SERVER_IMAGE="litmusportal-auth-server" >> env-vars
echo export FRONTEND_IMAGE="litmusportal-frontend" >> env-vars
echo export SUBSCRIBER_IMAGE="litmusportal-subscriber" >> env-vars
echo export EVENT_TRACKER="litmusportal-event-tracker" >> env-vars
- name: Uploading envs
uses: actions/upload-artifact@v2
with:
name: env_artifact
path: env-vars
docker-build-and-push-graphql-server:
runs-on: ubuntu-latest
needs:
- get-envs
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Downloading image artficate
uses: actions/download-artifact@v2
with:
name: env_artifact
- name: Build graphql server docker image
shell: bash
run: |
source env-vars
cd litmus-portal/graphql-server
docker build . -f build/Dockerfile -t ${{ secrets.REPONAME }}/${GRAPHQL_SERVER_IMAGE}:${IMG_TAG}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push graphql server docker image
shell: bash
run: |
branch=${GITHUB_REF#refs/*/}
array=(`echo ${GITHUB_REF} | sed 's/\//\n/g'`)
if [ $branch == "master" ] || [ ${array[1]} == "tags" ] || [[ $branch =~ ^v[0-9]*.[0-9]*.x$ ]]
then
source env-vars
docker push ${{ secrets.REPONAME }}/${GRAPHQL_SERVER_IMAGE}:${IMG_TAG}
fi
docker-build-and-push-authentication-server:
runs-on: ubuntu-latest
needs:
- get-envs
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Downloading image artficate
uses: actions/download-artifact@v2
with:
name: env_artifact
- name: Build auth server docker image
shell: bash
run: |
source env-vars
cd litmus-portal/authentication
docker images && docker build . -f Dockerfile -t ${{ secrets.REPONAME }}/${AUTHENTICATION_SERVER_IMAGE}:${IMG_TAG}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push auth server docker image
shell: bash
run: |
branch=${GITHUB_REF#refs/*/}
array=(`echo ${GITHUB_REF} | sed 's/\//\n/g'`)
if [ $branch == "master" ] || [ ${array[1]} == "tags" ] || [[ $branch =~ ^v[0-9]*.[0-9]*.x$ ]]
then
source env-vars
docker push ${{ secrets.REPONAME }}/${AUTHENTICATION_SERVER_IMAGE}:${IMG_TAG}
fi
docker-build-and-push-subscriber:
runs-on: ubuntu-latest
needs:
- get-envs
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Downloading image artficate
uses: actions/download-artifact@v2
with:
name: env_artifact
- name: Build subscriber docker image
shell: bash
run: |
source env-vars
cd litmus-portal/cluster-agents/subscriber
docker build . -f build/Dockerfile -t ${{ secrets.REPONAME }}/${SUBSCRIBER_IMAGE}:${IMG_TAG}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push subscriber docker image
shell: bash
run: |
branch=${GITHUB_REF#refs/*/}
array=(`echo ${GITHUB_REF} | sed 's/\//\n/g'`)
if [ $branch == "master" ] || [ ${array[1]} == "tags" ] || [[ $branch =~ ^v[0-9]*.[0-9]*.x$ ]]
then
source env-vars
docker push ${{ secrets.REPONAME }}/${SUBSCRIBER_IMAGE}:${IMG_TAG}
fi
docker-build-and-push-event-tracker:
runs-on: ubuntu-latest
needs:
- get-envs
- backend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Downloading image artficate
uses: actions/download-artifact@v2
with:
name: env_artifact
- name: Build event tracker docker image
shell: bash
run: |
source env-vars
cd litmus-portal/cluster-agents/event-tracker
docker build . -f build/Dockerfile -t ${{ secrets.REPONAME }}/${EVENT_TRACKER}:${IMG_TAG}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push event tracker docker image
shell: bash
run: |
branch=${GITHUB_REF#refs/*/}
array=(`echo ${GITHUB_REF} | sed 's/\//\n/g'`)
if [ $branch == "master" ] || [ ${array[1]} == "tags" ] || [[ $branch =~ ^v[0-9]*.[0-9]*.x$ ]]
then
source env-vars
docker push ${{ secrets.REPONAME }}/${EVENT_TRACKER}:${IMG_TAG}
fi
docker-build-and-push-frontend:
runs-on: ubuntu-latest
needs:
- get-envs
- frontend-checks
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Downloading image artficate
uses: actions/download-artifact@v2
with:
name: env_artifact
- name: Build frontend docker image
shell: bash
run: |
source env-vars
cd litmus-portal/frontend
docker build . -f Dockerfile -t ${{ secrets.REPONAME }}/${FRONTEND_IMAGE}:${IMG_TAG}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push frontend docker image
shell: bash
run: |
branch=${GITHUB_REF#refs/*/}
array=(`echo ${GITHUB_REF} | sed 's/\//\n/g'`)
if [ $branch == "master" ] || [ ${array[1]} == "tags" ] || [[ $branch =~ ^v[0-9]*.[0-9]*.x$ ]]
then
source env-vars
docker push ${{ secrets.REPONAME }}/${FRONTEND_IMAGE}:${IMG_TAG}
fi

View File

@ -1,57 +0,0 @@
#!/bin/bash
set -e
# Push CI images
function push_ci_image(){
echo "Pushing ${REPONAME}/${IMGNAME}:${IMGTAG} ..."
docker push ${REPONAME}/${IMGNAME}:${IMGTAG}
}
# Push Release Images
function push_release_image(){
if [ ! -z "${CIRCLE_TAG}" ];
then
# Push with different tags if tagged as a release
# When github is tagged with a release, then CircleCI will
# set the release tag in env CIRCLE_TAG
echo "Pushing ${REPONAME}/${IMGNAME}:${CIRCLE_TAG} ..."
docker tag ${IMAGEID} ${REPONAME}/${IMGNAME}:${CIRCLE_TAG}
docker push ${REPONAME}/${IMGNAME}:${CIRCLE_TAG}
echo "Pushing ${REPONAME}/${IMGNAME}:latest ..."
docker tag ${IMAGEID} ${REPONAME}/${IMGNAME}:latest
docker push ${REPONAME}/${IMGNAME}:latest
fi;
}
BUILD_TYPE=$(echo $1 | cut -d "=" -f 2)
REPONAME=$(echo $2 | cut -d "=" -f 2)
IMGNAME=$(echo $3 | cut -d "=" -f 2)
IMGTAG=$(echo $4 | cut -d "=" -f 2)
# Check for Image Details
if [ -z "${REPONAME}" ] || [ -z "${IMGNAME}" ] || [ -z "${IMGTAG}" ]
then
echo "Image details are missing. Nothing to push.";
exit 1
fi
IMAGEID=$( docker images -q ${REPONAME}/${IMGNAME}:${IMGTAG} )
# Verify Docker Credentials
if [ ! -z "${DNAME}" ] && [ ! -z "${DPASS}" ];
then
docker login -u "${DNAME}" -p "${DPASS}";
if [ "${BUILD_TYPE}" == "ci" ]; then
push_ci_image;
elif [ "${BUILD_TYPE}" == "release" ]; then
push_release_image;
else
echo "Invalid build type"; exit 1
fi
else
echo "No docker credentials provided. Skip uploading ${REPONAME}/${IMGNAME}:${IMGTAG} to docker hub";
fi