diff --git a/.github/workflows/api-multi-module-workflow-v2.yml b/.github/workflows/api-multi-module-workflow-v2.yml new file mode 100644 index 0000000..9570336 --- /dev/null +++ b/.github/workflows/api-multi-module-workflow-v2.yml @@ -0,0 +1,124 @@ +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 from https://github.com/ArbinaHQ/arbina-github-runner/tree/master/docker/api." + required: true + type: boolean + IS_COPY_DOCKER_DIRECTORY: + description: "Using for copy default docker directory (entrypoint, cron, healthcheck) from https://github.com/ArbinaHQ/arbina-github-runner/tree/master/docker/api." + required: true + type: boolean + +jobs: + sonar-check: + name: SonarQube check + runs-on: custom + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + + - name: Set up JDK 17 + uses: actions/setup-java@v1 + with: + java-version: 17 + + - name: Build and analyze (exclude test) + if: ${{ !inputs.IS_TEST_ENABLED }} + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_CAN_READ_PACKAGES || secrets.GH_DEPBOT_TOKEN_CAN_READ_PACKAGES }} + GITHUB_USERNAME: ${{ secrets.GH_USER_CAN_READ_PACKAGES || secrets.GH_DEPBOT_USER_CAN_READ_PACKAGES }} + SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST_URL }} + run: ./gradlew build sonar --info -x test -p ${{ inputs.MODULE_NAME }} + + - name: Build and analyze (include test) + if: ${{ inputs.IS_TEST_ENABLED }} + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_CAN_READ_PACKAGES || secrets.GH_DEPBOT_TOKEN_CAN_READ_PACKAGES }} + GITHUB_USERNAME: ${{ secrets.GH_USER_CAN_READ_PACKAGES || secrets.GH_DEPBOT_USER_CAN_READ_PACKAGES }} + SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST_URL }} + run: ./gradlew build test sonar --info -p ${{ inputs.MODULE_NAME }} + + api-multi-module-workflow: + runs-on: custom + steps: + - uses: actions/checkout@v3 + - 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: Build application + if: ${{ !inputs.IS_TEST_ENABLED }} + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_CAN_READ_PACKAGES || secrets.GH_DEPBOT_TOKEN_CAN_READ_PACKAGES }} + GITHUB_USERNAME: ${{ secrets.GH_USER_CAN_READ_PACKAGES || secrets.GH_DEPBOT_USER_CAN_READ_PACKAGES }} + run: ./gradlew bootJar -p ${{ inputs.MODULE_NAME }} + + - name: Build and test application + if: ${{ inputs.IS_TEST_ENABLED }} + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_CAN_READ_PACKAGES || secrets.GH_DEPBOT_TOKEN_CAN_READ_PACKAGES }} + GITHUB_USERNAME: ${{ secrets.GH_USER_CAN_READ_PACKAGES || secrets.GH_DEPBOT_USER_CAN_READ_PACKAGES }} + run: ./gradlew bootJar test -p ${{ inputs.MODULE_NAME }} + + - 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@v2 + with: + registry: ${{ secrets.ARBINA_ECR_REGISTRY }} + username: ${{ secrets.ARBINA_ECR_USERNAME }} + password: ${{ secrets.ARBINA_ECR_PASSWORD }} + + - name: Build, tag, and push image to ECR + if: ${{ inputs.IS_ECR_PUSH_ENABLED }} + env: + ECR_REGISTRY: ${{ secrets.ARBINA_ECR_REGISTRY }} + ECR_REPOSITORY: ${{ inputs.ECR_REPOSITORY }} + IMAGE_TAG: ${{ github.sha }} + 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 }} diff --git a/.github/workflows/api-single-module-v2-workflow.yml b/.github/workflows/api-single-module-workflow-v2.yml similarity index 100% rename from .github/workflows/api-single-module-v2-workflow.yml rename to .github/workflows/api-single-module-workflow-v2.yml