add: build docker hub

This commit is contained in:
Warunee Tamkoo 2025-12-23 21:50:04 +07:00
parent 2b1d6852c9
commit d10c86e0cb
3 changed files with 90 additions and 276 deletions

View file

@ -0,0 +1,90 @@
name: DockerHub Release - Leave Service
run-name: DockerHub Release - Leave Service by ${{ github.actor }}
on:
push:
tags:
- "leave-[0-9]+.[0-9]+.[0-9]+"
branches:
- main
- develop
workflow_dispatch:
inputs:
IMAGE_VER:
description: 'Image version (e.g., latest, v1.0.0)'
required: false
default: 'latest'
env:
DOCKERHUB_REGISTRY: docker.io
IMAGE_NAME: hrms-api-leave
jobs:
release-to-dockerhub:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set output tags
id: vars
run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
- name: Generate version
id: gen_ver
run: |
if [[ $GITHUB_REF == 'refs/tags/'* ]]; then
IMAGE_VER=${{ steps.vars.outputs.tag }}
elif [[ $GITHUB_REF == 'refs/heads/'* ]]; then
BRANCH_NAME=${GITHUB_REF#refs/heads/}
IMAGE_VER="${BRANCH_NAME}-latest"
else
IMAGE_VER=${{ github.event.inputs.IMAGE_VER }}
fi
if [[ $IMAGE_VER == '' ]]; then
IMAGE_VER='test-vBeta'
fi
echo "image_ver=${IMAGE_VER}" >> $GITHUB_OUTPUT
echo "Generated version: ${IMAGE_VER}"
- name: Display version
run: |
echo "Git Ref: $GITHUB_REF"
echo "Image Version: ${{ steps.gen_ver.outputs.image_ver }}"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{env.DOCKERHUB_REGISTRY}}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=tag
type=ref,event=branch
type=raw,value=${{ steps.gen_ver.outputs.image_ver }}
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: BMA.EHR.Leave/Dockerfile
platforms: linux/amd64
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ steps.gen_ver.outputs.image_ver }}
${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:latest
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Image digest
run: echo "Image pushed with digest ${{ steps.build.outputs.digest }}"

View file

@ -1,138 +0,0 @@
version: 38
jobs:
- name: CI for UAT
steps:
- !CheckoutStep
name: checkout code
cloneCredential: !DefaultCredential {}
withLfs: false
withSubmodules: false
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !GenerateChecksumStep
name: generate project checksum
files: "**/*.csproj"
targetFile: checksum
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !SetupCacheStep
name: set up nuget cache
key: nuget_packages_@file:checksum@
loadKeys:
- nuget_packages
paths:
- /root/.nuget/packages
uploadStrategy: UPLOAD_IF_NOT_HIT
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !CommandStep
name: test and analyze
runInContainer: true
image: mcr.microsoft.com/dotnet/sdk
interpreter: !DefaultInterpreter
commands: |
set -e
dotnet tool install -g roslynator.dotnet.cli
dotnet test -l trx --collect:"XPlat Code Coverage"
#/root/.dotnet/tools/roslynator analyze -o roslynator-analysis.xml
useTTY: true
condition: NEVER
- !PublishTRXReportStep
name: publish unit test report
reportName: Unit Test
filePatterns: "**/*.trx"
condition: NEVER
- !PublishCoberturaReportStep
name: publish code coverage report
reportName: Code Coverage
filePatterns: "**/coverage.cobertura.xml"
condition: NEVER
- !PublishRoslynatorReportStep
name: publish code problem report
reportName: Code Problems
filePatterns: roslynator-analysis.xml
failThreshold: HIGH
condition: NEVER
- !SetBuildVersionStep
name: set build version
buildVersion: "@tag@"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !BuildImageStep
name: build docker image
dockerfile: ./BMA.EHR.Leave/Dockerfile
output: !RegistryOutput
tags: "@server@/bma-hrms/hrms-api-leave:@build_version@ @server@/bma-hrms/hrms-api-leave:latest"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
triggers:
- !TagCreateTrigger
tags: leave-uat-*
branches: main
retryCondition: never
maxRetries: 3
retryDelay: 30
timeout: 14400
- name: CI for PROD
steps:
- !CheckoutStep
name: checkout code
cloneCredential: !DefaultCredential {}
withLfs: false
withSubmodules: false
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !GenerateChecksumStep
name: generate project checksum
files: "**/*.csproj"
targetFile: checksum
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !SetupCacheStep
name: set up nuget cache
key: nuget_packages_@file:checksum@
loadKeys:
- nuget_packages
paths:
- /root/.nuget/packages
uploadStrategy: UPLOAD_IF_NOT_HIT
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !CommandStep
name: test and analyze
runInContainer: true
image: mcr.microsoft.com/dotnet/sdk
interpreter: !DefaultInterpreter
commands: |
set -e
dotnet tool install -g roslynator.dotnet.cli
dotnet test -l trx --collect:"XPlat Code Coverage"
#/root/.dotnet/tools/roslynator analyze -o roslynator-analysis.xml
useTTY: true
condition: NEVER
- !PublishTRXReportStep
name: publish unit test report
reportName: Unit Test
filePatterns: "**/*.trx"
condition: NEVER
- !PublishCoberturaReportStep
name: publish code coverage report
reportName: Code Coverage
filePatterns: "**/coverage.cobertura.xml"
condition: NEVER
- !PublishRoslynatorReportStep
name: publish code problem report
reportName: Code Problems
filePatterns: roslynator-analysis.xml
failThreshold: HIGH
condition: NEVER
- !SetBuildVersionStep
name: set build version
buildVersion: "@tag@"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !BuildImageStep
name: build docker image
dockerfile: ./BMA.EHR.Leave/Dockerfile
output: !RegistryOutput
tags: "@server@/bma-hrms/hrms-api-leave:@build_version@ @server@/bma-hrms/hrms-api-leave:latest"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
triggers:
- !TagCreateTrigger
tags: leave-prod-*
branches: main
retryCondition: never
maxRetries: 3
retryDelay: 30
timeout: 14400

View file

@ -1,138 +0,0 @@
version: 38
jobs:
- name: CI for UAT Placement
steps:
- !CheckoutStep
name: checkout code
cloneCredential: !DefaultCredential {}
withLfs: false
withSubmodules: false
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !GenerateChecksumStep
name: generate project checksum
files: "**/*.csproj"
targetFile: checksum
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !SetupCacheStep
name: set up nuget cache
key: nuget_packages_@file:checksum@
loadKeys:
- nuget_packages
paths:
- /root/.nuget/packages
uploadStrategy: UPLOAD_IF_NOT_HIT
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !CommandStep
name: test and analyze
runInContainer: true
image: mcr.microsoft.com/dotnet/sdk
interpreter: !DefaultInterpreter
commands: |
set -e
dotnet tool install -g roslynator.dotnet.cli
dotnet test -l trx --collect:"XPlat Code Coverage"
#/root/.dotnet/tools/roslynator analyze -o roslynator-analysis.xml
useTTY: true
condition: NEVER
- !PublishTRXReportStep
name: publish unit test report
reportName: Unit Test
filePatterns: "**/*.trx"
condition: NEVER
- !PublishCoberturaReportStep
name: publish code coverage report
reportName: Code Coverage
filePatterns: "**/coverage.cobertura.xml"
condition: NEVER
- !PublishRoslynatorReportStep
name: publish code problem report
reportName: Code Problems
filePatterns: roslynator-analysis.xml
failThreshold: HIGH
condition: NEVER
- !SetBuildVersionStep
name: set build version
buildVersion: "@tag@"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !BuildImageStep
name: build docker image
dockerfile: ./BMA.EHR.Placement.Service/Dockerfile
output: !RegistryOutput
tags: "@server@/bma-hrms/hrms-api-placement:@build_version@ @server@/bma-hrms/hrms-api-placement:latest"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
triggers:
- !TagCreateTrigger
tags: placement-uat-*
branches: main
retryCondition: never
maxRetries: 3
retryDelay: 30
timeout: 14400
- name: CI for PROD Placement
steps:
- !CheckoutStep
name: checkout code
cloneCredential: !DefaultCredential {}
withLfs: false
withSubmodules: false
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !GenerateChecksumStep
name: generate project checksum
files: "**/*.csproj"
targetFile: checksum
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !SetupCacheStep
name: set up nuget cache
key: nuget_packages_@file:checksum@
loadKeys:
- nuget_packages
paths:
- /root/.nuget/packages
uploadStrategy: UPLOAD_IF_NOT_HIT
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !CommandStep
name: test and analyze
runInContainer: true
image: mcr.microsoft.com/dotnet/sdk
interpreter: !DefaultInterpreter
commands: |
set -e
dotnet tool install -g roslynator.dotnet.cli
dotnet test -l trx --collect:"XPlat Code Coverage"
#/root/.dotnet/tools/roslynator analyze -o roslynator-analysis.xml
useTTY: true
condition: NEVER
- !PublishTRXReportStep
name: publish unit test report
reportName: Unit Test
filePatterns: "**/*.trx"
condition: NEVER
- !PublishCoberturaReportStep
name: publish code coverage report
reportName: Code Coverage
filePatterns: "**/coverage.cobertura.xml"
condition: NEVER
- !PublishRoslynatorReportStep
name: publish code problem report
reportName: Code Problems
filePatterns: roslynator-analysis.xml
failThreshold: HIGH
condition: NEVER
- !SetBuildVersionStep
name: set build version
buildVersion: "@tag@"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
- !BuildImageStep
name: build docker image
dockerfile: ./BMA.EHR.Placement.Service/Dockerfile
output: !RegistryOutput
tags: "@server@/bma-hrms/hrms-api-placement:@build_version@ @server@/bma-hrms/hrms-api-placement:latest"
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
triggers:
- !TagCreateTrigger
tags: placement-prod-*
branches: main
retryCondition: never
maxRetries: 3
retryDelay: 30
timeout: 14400