added git actions
This commit is contained in:
parent
916aca0129
commit
3955b0a148
5 changed files with 271 additions and 0 deletions
35
level_2/.github/actions/image_builder/action.yaml
vendored
Normal file
35
level_2/.github/actions/image_builder/action.yaml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
name: 'Build Docker images for PromethAI'
|
||||
description: 'Build PromethAI-related Docker images and push to the Docker registry (AWS ECR)'
|
||||
inputs:
|
||||
stage:
|
||||
description: 'The stage of the pipeline, such as "dev" or "prd", for the PromethAI app'
|
||||
required: true
|
||||
aws_account_id:
|
||||
description: 'The AWS account ID for the PromethAI app'
|
||||
required: true
|
||||
should_publish:
|
||||
description: 'Whether to publish the PromethAI Docker image to AWS ECR; should be either "true" or "false"'
|
||||
required: true
|
||||
ecr_image_repo_name:
|
||||
description: 'The Docker image ECR repository name for the PromethAI app, such as "workflows"'
|
||||
required: true
|
||||
dockerfile_location:
|
||||
description: 'The directory location of the Dockerfile for the PromethAI app'
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Build PromethAI App Docker image
|
||||
shell: bash
|
||||
env:
|
||||
STAGE: ${{ inputs.stage }}
|
||||
run: |
|
||||
export SHA_SHORT="$(git rev-parse --short HEAD)"
|
||||
export CUR_DATE="$(date +%Y%m%d%H%M%S)"
|
||||
export VERSION="${{ inputs.stage }}-$CUR_DATE-$SHA_SHORT"
|
||||
export STAGE="${{ inputs.stage }}"
|
||||
export APP_DIR="$PWD/${{ inputs.dockerfile_location }}"
|
||||
image_name="${{ inputs.ecr_image_repo_name }}" docker_login="true" version="$VERSION" account="${{ inputs.aws_account_id }}" app_dir="$APP_DIR" publish="${{ inputs.should_publish }}" ./bin/dockerize
|
||||
echo "Docker tag is: $VERSION"
|
||||
echo $VERSION > /tmp/.DOCKER_IMAGE_VERSION
|
||||
76
level_2/.github/workflows/cd.yaml
vendored
Normal file
76
level_2/.github/workflows/cd.yaml
vendored
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
name: Publishing promethai-backend Docker image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
- feature/*
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
|
||||
env:
|
||||
AWS_ROLE_DEV_CICD: "arn:aws:iam::463722570299:role/promethai-dev-base-role-github-ci-cd"
|
||||
AWS_ACCOUNT_ID_DEV: "463722570299"
|
||||
|
||||
jobs:
|
||||
|
||||
publish_docker_to_ecr:
|
||||
name: Publish Docker PromethAI image
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Take code from repo
|
||||
uses: actions/checkout@v3
|
||||
- name: Set environment variable for stage
|
||||
id: set-env
|
||||
run: |
|
||||
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
|
||||
echo "STAGE=prd" >> $GITHUB_ENV
|
||||
echo "::set-output name=stage::prd"
|
||||
else
|
||||
echo "STAGE=dev" >> $GITHUB_ENV
|
||||
echo "::set-output name=stage::dev"
|
||||
fi
|
||||
- name: Use output
|
||||
run: echo "The stage is ${{ steps.set-env.outputs.stage }}"
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
role-to-assume: ${{ env.AWS_ROLE_DEV_CICD }}
|
||||
aws-region: eu-west-1
|
||||
- name: Create Docker image and push to ECR
|
||||
uses: ./.github/actions/image_builder
|
||||
id: generate-promethai-docker
|
||||
with:
|
||||
stage: dev
|
||||
aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }}
|
||||
should_publish: true
|
||||
ecr_image_repo_name: promethai-dev-backend-promethai-backend-memory
|
||||
dockerfile_location: ./
|
||||
- name: Export Docker image tag
|
||||
id: export-promethai-docker-tag
|
||||
run: |
|
||||
export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION)
|
||||
echo "Docker tag is: $DOCKER_TAG"
|
||||
echo "promethai_docker_tag_backend=$DOCKER_TAG" >> $GITHUB_OUTPUT
|
||||
outputs:
|
||||
promethai_docker_tag_backend: ${{ steps.export-promethai-docker-tag.outputs.promethai_docker_tag_backend }}
|
||||
|
||||
apply_tf:
|
||||
name: Trigger terraform apply workflow
|
||||
runs-on: ubuntu-latest
|
||||
needs: publish_docker_to_ecr
|
||||
steps:
|
||||
- name: TF apply workflow triggers step
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
github-token: ${{ secrets.PAT_FOR_CROSS_REPOS_CICD_TRIGGERING }}
|
||||
script: |
|
||||
await github.rest.actions.createWorkflowDispatch({
|
||||
owner: 'topoteretes',
|
||||
repo: 'PromethAI-Infra',
|
||||
workflow_id: 'terraform.apply.yml',
|
||||
ref: 'main'
|
||||
})
|
||||
99
level_2/.github/workflows/cd_prd.yaml
vendored
Normal file
99
level_2/.github/workflows/cd_prd.yaml
vendored
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- 'examples/**'
|
||||
name: Publishing promethai-backend Docker image to prd ECR
|
||||
|
||||
env:
|
||||
AWS_ROLE_DEV_CICD: "arn:aws:iam::463722570299:role/promethai-dev-base-role-github-ci-cd"
|
||||
AWS_ACCOUNT_ID_DEV: "463722570299"
|
||||
ENVIRONMENT: prd
|
||||
|
||||
jobs:
|
||||
|
||||
publish_docker_to_ecr:
|
||||
name: Publish Docker PromethAI image
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Take code from repo
|
||||
uses: actions/checkout@v3
|
||||
- name: Set environment variable for stage
|
||||
id: set-env
|
||||
run: |
|
||||
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
|
||||
echo "STAGE=prd" >> $GITHUB_ENV
|
||||
echo "::set-output name=stage::prd"
|
||||
else
|
||||
echo "STAGE=dev" >> $GITHUB_ENV
|
||||
echo "::set-output name=stage::dev"
|
||||
fi
|
||||
- name: Use output
|
||||
run: echo "The stage is ${{ steps.set-env.outputs.stage }}"
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
role-to-assume: ${{ env.AWS_ROLE_DEV_CICD }}
|
||||
aws-region: eu-west-1
|
||||
- name: Create Docker image and push to ECR
|
||||
uses: ./.github/actions/image_builder
|
||||
id: generate-promethai-docker
|
||||
with:
|
||||
stage: prd
|
||||
aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }}
|
||||
should_publish: true
|
||||
ecr_image_repo_name: promethai-prd-backend-promethai-backend-memory
|
||||
dockerfile_location: ./
|
||||
- name: Export Docker image tag
|
||||
id: export-promethai-docker-tag
|
||||
run: |
|
||||
export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION)
|
||||
echo "Docker tag is: $DOCKER_TAG"
|
||||
echo "promethai_docker_tag_backend=$DOCKER_TAG" >> $GITHUB_OUTPUT
|
||||
|
||||
# - name: Create Tag and Release
|
||||
# runs-on: ubuntu-latest
|
||||
# uses: actions/checkout@v3
|
||||
# needs: publish_docker_to_ecr # ensure this job runs after Docker image is pushed
|
||||
# steps:
|
||||
# - name: Check out code
|
||||
# uses: actions/checkout@v3
|
||||
# - name: Bump version and push tag
|
||||
# id: bump_version_and_push_tag
|
||||
# uses: anothrNick/github-tag-action@1.34.0
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.PAT_FOR_CROSS_REPOS_CICD_TRIGGERING }}
|
||||
# WITH_V: true
|
||||
# DEFAULT_BUMP: 'minor' # or 'minor' or 'major'
|
||||
# - name: Create Release
|
||||
# id: create_release
|
||||
# uses: actions/create-release@v1
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.PAT_FOR_CROSS_REPOS_CICD_TRIGGERING }}
|
||||
# with:
|
||||
# tag_name: ${{ steps.bump_version_and_push_tag.outputs.tag }}
|
||||
# release_name: Release ${{ steps.bump_version_and_push_tag.outputs.tag }}
|
||||
outputs:
|
||||
promethai_docker_tag_backend: ${{ steps.export-promethai-docker-tag.outputs.promethai_docker_tag_backend }}
|
||||
|
||||
apply_tf:
|
||||
name: Trigger terraform apply workflow
|
||||
runs-on: ubuntu-latest
|
||||
needs: publish_docker_to_ecr
|
||||
steps:
|
||||
- name: TF apply workflow triggers step
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
github-token: ${{ secrets.PAT_FOR_CROSS_REPOS_CICD_TRIGGERING }}
|
||||
script: |
|
||||
await github.rest.actions.createWorkflowDispatch({
|
||||
owner: 'topoteretes',
|
||||
repo: 'PromethAI-Infra',
|
||||
workflow_id: 'terraform.apply.yml',
|
||||
ref: 'main'
|
||||
})
|
||||
25
level_2/.github/workflows/ci.yaml
vendored
Normal file
25
level_2/.github/workflows/ci.yaml
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
name: Test build docker image for PromethAI backend app
|
||||
|
||||
on: pull_request
|
||||
|
||||
env:
|
||||
AWS_ACCOUNT_ID_DEV: "463722570299"
|
||||
|
||||
jobs:
|
||||
|
||||
build_docker:
|
||||
name: Build PromethAI Backend Docker App Image
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out PromethAI code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Build PromethAI backend Docker image tag
|
||||
id: backend-docker-tag
|
||||
run: |
|
||||
export SHA_SHORT="$(git rev-parse --short HEAD)"
|
||||
export CUR_DATE="$(date +%Y%m%d%H%M%S)"
|
||||
export VERSION="dev-$CUR_DATE-$SHA_SHORT"
|
||||
image_name="backend" docker_login="false" version="$VERSION" account="${{ env.AWS_ACCOUNT_ID_DEV }}" app_dir="backend" publish="false" ./bin/dockerize
|
||||
export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION)
|
||||
echo "Successfully built PromethAI backend Docker tag is: $DOCKER_TAG"
|
||||
36
level_2/bin/dockerize
Executable file
36
level_2/bin/dockerize
Executable file
|
|
@ -0,0 +1,36 @@
|
|||
set -euo pipefail
|
||||
|
||||
AWS_REGION=${region:-eu-west-1}
|
||||
AWS_DEPLOYMENT_ACCOUNT=${account:-463722570299}
|
||||
AWS_REPOSITORY=${repo:-"${AWS_DEPLOYMENT_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"}
|
||||
|
||||
STAGE=${stage:-"dev"}
|
||||
SHA_SHORT="$(git rev-parse --short HEAD)"
|
||||
CUR_DATE="$(date +%Y%m%d%H%M%S)"
|
||||
VERSION="$STAGE-$CUR_DATE-$SHA_SHORT"
|
||||
IMAGE_NAME=${image_name:-promethai-${STAGE}-promethai-backend}
|
||||
|
||||
REPO_NAME="${AWS_REPOSITORY}/${IMAGE_NAME}"
|
||||
FULL_IMAGE_NAME="${REPO_NAME}:${VERSION}"
|
||||
APP_DIR=${app_dir:-"."}
|
||||
|
||||
PUBLISH=${publish:-false}
|
||||
|
||||
echo "Building docker image ${FULL_IMAGE_NAME} located in dir ${app_dir}"
|
||||
|
||||
pushd "${APP_DIR}" &&
|
||||
docker buildx build --platform linux/amd64 \
|
||||
--build-arg STAGE=${STAGE} \
|
||||
-t "${FULL_IMAGE_NAME}" . &&
|
||||
echo "${VERSION}" >/tmp/.DOCKER_IMAGE_VERSION &&
|
||||
echo "Successfully built docker image ${FULL_IMAGE_NAME}"
|
||||
|
||||
if [ "${PUBLISH}" = true ]; then
|
||||
echo "Pushing docker image ${FULL_IMAGE_NAME} to ECR repository to AWS account ${AWS_DEPLOYMENT_ACCOUNT}"
|
||||
if [ "${PUBLISH}" = true ]; then
|
||||
echo "logging in"
|
||||
aws ecr get-login-password --region "${AWS_REGION}" | docker login --username AWS --password-stdin "${AWS_REPOSITORY}"
|
||||
fi
|
||||
docker push "${FULL_IMAGE_NAME}" &&
|
||||
echo "Successfully pushed docker image ${FULL_IMAGE_NAME} to ECR repository"
|
||||
fi
|
||||
Loading…
Add table
Reference in a new issue