Skip to content

Build and Deploy

Build and Deploy #310

Workflow file for this run

name: Build and Deploy
on:
push:
branches:
- main
- dev
- stg
workflow_dispatch:
inputs:
force:
description: 'Force exec'
type: boolean
required: true
jobs:
Detect:
runs-on: ubuntu-latest
outputs:
app: ${{ steps.detect.outputs.app }}
app-authentication: ${{ steps.detect.outputs.app-authentication }}
app-authorization: ${{ steps.detect.outputs.app-authorization }}
app-gateway: ${{ steps.detect.outputs.app-gateway }}
app-abstractions: ${{ steps.detect.outputs.app-abstractions }}
app-extensions: ${{ steps.detect.outputs.app-extensions }}
app-protos: ${{ steps.detect.outputs.app-protos }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect Change
id: detect
run: |
APP="Netcorext.Auth.API"
APP_AUTHENTICATION="Netcorext.Auth.Authentication"
APP_AUTHORIZATION="Netcorext.Auth.Authorization"
APP_GATEWAY="Netcorext.Auth.Gateway"
APP_CORE="Netcorext.Auth.Core"
APP_ABSTRACTIONS="Netcorext.Auth.Abstractions"
APP_EXTENSIONS="Netcorext.Auth.Extensions.AspNetCore"
APP_PROTOS="Netcorext.Auth.Protobufs"
CHANGE_FILES=`git diff --no-commit-id --name-only HEAD^`
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP}|${APP_CORE}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP}"
APP=""
fi
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_AUTHENTICATION}|${APP_CORE}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP_AUTHENTICATION}"
APP_AUTHENTICATION=""
fi
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_AUTHORIZATION}|${APP_CORE}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP_AUTHORIZATION}"
APP_AUTHORIZATION=""
fi
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_GATEWAY}|${APP_CORE}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP_GATEWAY}"
APP_GATEWAY=""
fi
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_ABSTRACTIONS}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP_ABSTRACTIONS}"
APP_ABSTRACTIONS=""
fi
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_EXTENSIONS}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP_EXTENSIONS}"
APP_EXTENSIONS=""
fi
CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_PROTOS}" || true`
if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then
echo "No changes in ${APP_PROTOS}"
APP_PROTOS=""
fi
echo "app=${APP}" >> $GITHUB_OUTPUT
echo "app-authentication=${APP_AUTHENTICATION}" >> $GITHUB_OUTPUT
echo "app-authorization=${APP_AUTHORIZATION}" >> $GITHUB_OUTPUT
echo "app-gateway=${APP_GATEWAY}" >> $GITHUB_OUTPUT
echo "app-abstractions=${APP_ABSTRACTIONS}" >> $GITHUB_OUTPUT
echo "app-extensions=${APP_EXTENSIONS}" >> $GITHUB_OUTPUT
echo "app-protos=${APP_PROTOS}" >> $GITHUB_OUTPUT
Build:
name: "Build Netcorext.Auth.API"
needs: Detect
if: needs.Detect.outputs.app != ''
runs-on: ubuntu-latest
env:
app: ${{ needs.Detect.outputs.app }}
outputs:
app: ${{ steps.envs.outputs.app }}
branch: ${{ steps.envs.outputs.branch }}
image: ${{ steps.envs.outputs.image }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: envs
uses: netcorext/dotnet-version-action@dev
with:
app: ${{ env.app }}
image-prefix: ${{ vars.IMAGE_PREFIX }}
- uses: netcorext/dotnet-dockerfile-action@dev
with:
expand-command: apt-get update && apt-get install -y curl
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build Image & Push
uses: netcorext/buildx-image-action@dev
with:
image: ${{ steps.envs.outputs.image-fullName }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
build-arg: |-
--build-arg APP="${{ steps.envs.outputs.app }}" \
--build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}"
Build-Authentication:
name: "Build Netcorext.Auth.Authentication"
needs: Detect
if: needs.Detect.outputs.app-authentication != ''
runs-on: ubuntu-latest
env:
app: ${{ needs.Detect.outputs.app-authentication }}
outputs:
app: ${{ steps.envs.outputs.app }}
branch: ${{ steps.envs.outputs.branch }}
image: ${{ steps.envs.outputs.image }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: envs
uses: netcorext/dotnet-version-action@dev
with:
app: ${{ env.app }}
image-prefix: ${{ vars.IMAGE_PREFIX }}
- uses: netcorext/dotnet-dockerfile-action@dev
with:
expand-command: apt-get update && apt-get install -y curl
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build Image & Push
uses: netcorext/buildx-image-action@dev
with:
image: ${{ steps.envs.outputs.image-fullName }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
build-arg: |-
--build-arg APP="${{ steps.envs.outputs.app }}" \
--build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}"
Build-Authorization:
name: "Build Netcorext.Auth.Authorization"
needs: Detect
if: needs.Detect.outputs.app-authorization != ''
runs-on: ubuntu-latest
env:
app: ${{ needs.Detect.outputs.app-authorization }}
outputs:
app: ${{ steps.envs.outputs.app }}
branch: ${{ steps.envs.outputs.branch }}
image: ${{ steps.envs.outputs.image }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: envs
uses: netcorext/dotnet-version-action@dev
with:
app: ${{ env.app }}
image-prefix: ${{ vars.IMAGE_PREFIX }}
- uses: netcorext/dotnet-dockerfile-action@dev
with:
expand-command: apt-get update && apt-get install -y curl
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build Image & Push
uses: netcorext/buildx-image-action@dev
with:
image: ${{ steps.envs.outputs.image-fullName }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
build-arg: |-
--build-arg APP="${{ steps.envs.outputs.app }}" \
--build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}"
Build-Gateway:
name: "Build Netcorext.Auth.Gateway"
needs: Detect
if: needs.Detect.outputs.app-gateway != ''
runs-on: ubuntu-latest
env:
app: ${{ needs.Detect.outputs.app-gateway }}
outputs:
app: ${{ steps.envs.outputs.app }}
branch: ${{ steps.envs.outputs.branch }}
image: ${{ steps.envs.outputs.image }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: envs
uses: netcorext/dotnet-version-action@dev
with:
app: ${{ env.app }}
image-prefix: ${{ vars.IMAGE_PREFIX }}
- uses: netcorext/dotnet-dockerfile-action@dev
with:
expand-command: apt-get update && apt-get install -y curl
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build Image & Push
uses: netcorext/buildx-image-action@dev
with:
image: ${{ steps.envs.outputs.image-fullName }}
tag: ${{ steps.envs.outputs.tag }}
tag-hash: ${{ steps.envs.outputs.tag-hash }}
tag-latest: ${{ steps.envs.outputs.tag-latest }}
build-arg: |-
--build-arg APP="${{ steps.envs.outputs.app }}" \
--build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}"
Build-Abstractions:
name: "Build Netcorext.Auth.Abstractions"
needs: Detect
if: needs.Detect.outputs.app-abstractions != ''
runs-on: ubuntu-latest
outputs:
artifact: ${{ steps.build.outputs.artifact }}
steps:
- id: build
name: Build Package
uses: netcorext/dotnet-build-package-action@dev
with:
app: ${{ needs.Detect.outputs.app-abstractions }}
Deploy-Abstractions:
name: "Deploy Netcorext.Auth.Abstractions"
needs: Build-Abstractions
runs-on: ubuntu-latest
steps:
- uses: netcorext/push-nuget-package-action@dev
name: Push Package
with:
artifact: ${{ needs.Build-Abstractions.outputs.artifact }}
nuget-api-url: ${{ vars.NUGET_API_URL }}
nuget-api-key: ${{ secrets.NUGET_API_KEY }}
Build-Extensions:
name: "Build Netcorext.Auth.Extensions.AspNetCore"
needs: Detect
if: needs.Detect.outputs.app-extensions != ''
runs-on: ubuntu-latest
outputs:
artifact: ${{ steps.build.outputs.artifact }}
steps:
- id: build
name: Build Package
uses: netcorext/dotnet-build-package-action@dev
with:
app: ${{ needs.Detect.outputs.app-extensions }}
Deploy-Extensions:
name: "Deploy Netcorext.Auth.Extensions.AspNetCore"
needs: Build-Extensions
runs-on: ubuntu-latest
steps:
- uses: netcorext/push-nuget-package-action@dev
name: Push Package
with:
artifact: ${{ needs.Build-Extensions.outputs.artifact }}
nuget-api-url: ${{ vars.NUGET_API_URL }}
nuget-api-key: ${{ secrets.NUGET_API_KEY }}
Build-Protos:
name: "Build Netcorext.Auth.Protobufs"
needs: Detect
if: needs.Detect.outputs.app-protos != ''
runs-on: ubuntu-latest
outputs:
artifact: ${{ steps.build.outputs.artifact }}
steps:
- id: build
name: Build Package
uses: netcorext/dotnet-build-package-action@dev
with:
app: ${{ needs.Detect.outputs.app-protos }}
Deploy-Protos:
name: "Deploy Netcorext.Auth.Protobufs"
needs: Build-Protos
runs-on: ubuntu-latest
steps:
- uses: netcorext/push-nuget-package-action@dev
name: Push Package
with:
artifact: ${{ needs.Build-Protos.outputs.artifact }}
nuget-api-url: ${{ vars.NUGET_API_URL }}
nuget-api-key: ${{ secrets.NUGET_API_KEY }}