Files
arbina-workflow-template/.github/workflows/api-single-module-workflow.yml
2022-02-04 13:06:59 +03:00

102 lines
3.5 KiB
YAML

name: Reusable workflow. Using to build, test and push single module API
on:
workflow_call:
inputs:
ECR_REPOSITORY:
description: "Using for deploy docker image to ECR"
required: true
type: string
BOOT_JAR_NAME:
description: "Using for start docker container."
required: true
type: string
IS_TEST_ENABLED:
description: "Using for start test before pushing to ECR if value is true."
required: true
type: boolean
IS_ECR_PUSH_ENABLED:
description: "Using for disable pushing to ECR if value is true."
required: true
type: boolean
IS_COPY_DOCKERFILE:
description: "Using for copy default dockerfile."
required: true
type: boolean
IS_COPY_DOCKER_DIRECTORY:
description: "Using for copy default docker directory (entrypoint, cron, healthcheck)."
required: true
type: boolean
secrets:
SECRET_GITHUB_TOKEN:
required: true
SECRET_GITHUB_USERNAME:
required: true
SECRET_AWS_ACCESS_KEY_ID:
required: true
SECRET_AWS_SECRET_ACCESS_KEY:
required: true
SECRET_AWS_REGION:
required: true
SECRET_IMAGE_TAG:
required: true
jobs:
api-single-module-workflow:
runs-on: custom
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test application with Gradle
if: ${{ inputs.IS_TEST_ENABLED }}
run: ./gradlew test
env:
GITHUB_USERNAME: ${{ secrets.SECRET_GITHUB_USERNAME }}
GITHUB_TOKEN: ${{ secrets.SECRET_GITHUB_TOKEN }}
- name: Build application with Gradle
run: ./gradlew clean build bootJar
env:
GITHUB_USERNAME: ${{ secrets.SECRET_GITHUB_USERNAME }}
GITHUB_TOKEN: ${{ secrets.SECRET_GITHUB_TOKEN }}
- name: Copy docker directory
if: ${{ inputs.IS_COPY_DOCKER_DIRECTORY }}
run: cp -r /docker/api/docker ./
- name: Copy dockerfile
if: ${{ inputs.IS_COPY_DOCKERFILE }}
run: cp /docker/api/Dockerfile ./
- name: Login to Amazon ECR
if: ${{ inputs.IS_ECR_PUSH_ENABLED }}
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
env:
AWS_ACCESS_KEY_ID: ${{ secrets.SECRET_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SECRET_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.SECRET_AWS_REGION }}
- name: Build, tag, and push image to Amazon ECR
if: ${{ inputs.IS_ECR_PUSH_ENABLED }}
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ inputs.ECR_REPOSITORY }}
IMAGE_TAG: ${{ secrets.SECRET_IMAGE_TAG }}
BOOT_JAR_NAME: ${{ inputs.BOOT_JAR_NAME }}
run: |
docker build --build-arg=IMAGE_TAG=$IMAGE_TAG --build-arg=BOOT_JAR_NAME=$BOOT_JAR_NAME -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker build --build-arg=IMAGE_TAG=$IMAGE_TAG --build-arg=BOOT_JAR_NAME=$BOOT_JAR_NAME -t $ECR_REGISTRY/$ECR_REPOSITORY:latest .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
- name: Logout of Amazon ECR
if: always() && ${{ inputs.IS_ECR_PUSH_ENABLED }}
run: docker logout ${{ steps.login-ecr.outputs.registry }}