106 lines
3.6 KiB
YAML
106 lines
3.6 KiB
YAML
name: Reusable workflow. Using to build, test and push multi module API
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
MODULE_NAME:
|
|
description: "Using for choice specified module when build application."
|
|
required: true
|
|
type: string
|
|
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_ECR_REGISTRY:
|
|
required: true
|
|
SECRET_ECR_USERNAME:
|
|
required: true
|
|
SECRET_ECR_PASSWORD:
|
|
required: true
|
|
SECRET_IMAGE_TAG:
|
|
required: true
|
|
|
|
jobs:
|
|
api-multi-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 -p ${{ inputs.MODULE_NAME }}
|
|
env:
|
|
GITHUB_USERNAME: ${{ secrets.SECRET_GITHUB_USERNAME }}
|
|
GITHUB_TOKEN: ${{ secrets.SECRET_GITHUB_TOKEN }}
|
|
|
|
- name: Build application with Gradle
|
|
run: ./gradlew bootJar -p ${{ inputs.MODULE_NAME }}
|
|
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 ./
|
|
working-directory: ${{ inputs.MODULE_NAME }}
|
|
|
|
- name: Copy dockerfile
|
|
if: ${{ inputs.IS_COPY_DOCKERFILE }}
|
|
run: cp /docker/api/Dockerfile ./
|
|
working-directory: ${{ inputs.MODULE_NAME }}
|
|
|
|
- name: Login to ECR
|
|
if: ${{ inputs.IS_ECR_PUSH_ENABLED }}
|
|
id: login-ecr
|
|
uses: docker/login-action@v1
|
|
with:
|
|
registry: ${{ secrets.SECRET_ECR_REGISTRY }}
|
|
username: ${{ secrets.SECRET_ECR_USERNAME }}
|
|
password: ${{ secrets.SECRET_ECR_PASSWORD }}
|
|
|
|
- name: Build, tag, and push image to ECR
|
|
if: ${{ inputs.IS_ECR_PUSH_ENABLED }}
|
|
env:
|
|
ECR_REGISTRY: ${{ secrets.SECRET_ECR_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
|
|
working-directory: ${{ inputs.MODULE_NAME }}
|